1

我正在使用 django 的 ContentType 框架为我的模型创建一些通用关系;在查看了 django 开发人员如何做到这一点后,django.contrib.comments.models我想我会模仿他们的方法/约定:

来自django.contrib.comments.models,第 21 行):

content_type   = models.ForeignKey(ContentType,
        verbose_name='content type',
        related_name="content_type_set_for_%(class)s")
object_pk      = models.TextField('object ID')
content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")

这是从他们的源代码中获取的,当然,他们的源代码对我有用(我对 object_pk 的评论存储得很好(实际上是整数);但是,我在syncdb创建表的过程中遇到了一个错误:

_mysql_exceptions.OperationalError: (1170, "BLOB/TEXT column 'object_pk' used in key specification without a key length")

有什么想法为什么他们能做到而我不能?

环顾四周后,我注意到文档实际上指出:

为您的模型提供一个字段,该字段可以存储与您相关的模型的主键值。(对于大多数模型,这意味着 IntegerField 或 PositiveIntegerField。)

该字段必须与通用关系中涉及的模型的主键类型相同。例如,如果您使用 IntegerField,您将无法与使用 CharField 作为主键的模型形成通用关系。

但是为什么他们能做到而不是我呢?!

谢谢。

PS:我什至尝试使用这三个字段创建一个 AbstractBaseModel,制作abstract=True并使用它(以防万一与它有关)......同样的错误。

4

1 回答 1

1

在我输入了那个很长的问题后,我查看了 mysql 并意识到错误源于:

class Meta:
    unique_together = (("content_type", "object_pk"),)

显然,我不能同时拥有它。这让我很伤心。我将不得不提出一个新问题,即让我的object_pk选项保持打开状态(假设我使用文本字段作为主键?)还是更好地执行unique_togetherness...

于 2009-10-27T00:58:56.850 回答