我正在使用 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
并使用它(以防万一与它有关)......同样的错误。