Я работаю над использованием среды ContentType django для создания некоторых общих отношений для моих моделей; посмотрев на то, как разработчики django делают это на django.contrib.comments.models
, я подумал, что подражаю их подходу / соглашениям:
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
и использовать его (в случае, если это как-то связано с ним) ... та же ошибка.