代码之家  ›  专栏  ›  技术社区  ›  thornomad

使用内容类型(object-pk)创建泛型关系时出错

  •  1
  • thornomad  · 技术社区  · 15 年前

    我正在使用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")
    

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

    环顾四周,我注意到 the docs 实际状态:

    给你的模型一个字段,它可以存储你将要涉及的模型的主键值。(对于大多数模型,这意味着integerfield或positiveintegerfield。)

    此字段必须是 与将涉及泛型关系的模型的主键类型相同 . 例如,如果使用integerfield,则无法与使用charfield作为主键的模型形成泛型关系。

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

    谢谢。

    PS:我甚至尝试用这三个字段创建一个AbstractBaseModel,使之 abstract=True 使用它(以防与之有关的话)……同样的错误。

    1 回复  |  直到 13 年前
        1
  •  1
  •   thornomad    15 年前

    在我输入了那个很长的问题之后,我查看了MySQL,发现错误来自于:

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

    显然,我不能两面兼顾。让我心碎。我得问一个新问题,是不是离开我的 object_pk 选项打开(假设我使用文本字段作为主键?)或者更好地执行 unique_togetherness