Ошибки при создании общих отношений с использованием типов контента (object_pk)

StackOverflow https://stackoverflow.com/questions/1628173

Вопрос

Я работаю над использованием фреймворка 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...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top