Ошибки при создании общих отношений с использованием типов контента (object_pk)
-
06-07-2019 - |
Вопрос
Я работаю над использованием фреймворка ContentType от django для создания некоторых общих отношений для моих моделей;посмотрев на то, как разработчики django делают это на django.contrib.comments.models
Я думал, что буду подражать их подходу / условностям:
От django.contrib.комментарии.модели, строка 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")
Есть какие - нибудь идеи , почему они могут это сделать , а я не могу ?
Оглядевшись вокруг, я заметил, что документы на самом деле государство:
Присвойте вашей модели поле, в котором может храниться значение первичного ключа из моделей, с которыми вы будете иметь отношение.(Для большинства моделей это означает целочисленное поле или PositiveIntegerField.)
Это поле должно соответствовать тот же тип, что и первичный ключ моделей, которые будут задействованы в общем отношении.Например, если вы используете IntegerField, вы не сможете сформировать общую связь с моделью, которая использует CharField в качестве первичного ключа.
Но почему они могут это сделать , а я нет ?!
Спасибо.
PS:Я даже попытался создать AbstractBaseModel с этими тремя полями, сделав его abstract=True
и используя это (на случай, если это как-то связано с этим)...та же ошибка.
Решение
После того, как я напечатал этот действительно длинный вопрос, я посмотрел на mysql и понял, что ошибка была вызвана:
class Meta:
unique_together = (("content_type", "object_pk"),)
Очевидно, у меня не может быть и того, и другого.Что разрывает меня на части.Мне придется открыть новый вопрос о том, не лучше ли оставить мой object_pk
опции открываются (предположим, я использую текстовое поле в качестве первичного ключа?) или лучше применить unique_togetherness
...