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

来自 django.contrib.comments.models <的

/ a>,第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 并使用它(如果与它有关)......同样的错误。

有帮助吗?

解决方案

在输入那个很长的问题后,我查看了mysql,发现错误源于:

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

显然,我无法双管齐下。这让我感到很难受。我将不得不打开一个新的问题,关于是否更好地保持我的 object_pk 选项打开(假设我使用文本字段作为主键?)或更好地强制执行 unique_togetherness ...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top