Pergunta

Eu estou trabalhando para usar quadro ContentType do Django para criar algumas relações genérico para um meus modelos; depois de olhar para a forma como os desenvolvedores do Django fazê-lo em django.contrib.comments.models eu pensei que iria imitar sua abordagem / convenções:

django.contrib.comments.models , linha 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")

Isso é tirado de sua fonte e, é claro, sua fonte funciona para mim (tenho comentários com object_pk do armazenados apenas multa (inteiros, na verdade), no entanto, eu recebo um erro durante syncdb na criação de tabela que termina:

_mysql_exceptions.OperationalError: (1170, "BLOB/TEXT column 'object_pk' used in key specification without a key length")

Todas as ideias por que eles podem fazê-lo e eu não posso?

Depois de olhar em volta, notei que os docs realmente estado:

Dê ao seu modelo de um campo que pode armazenar um valor de chave primária a partir dos modelos você vai estar relacionadas com. (Para a maioria dos modelos, isto significa um IntegerField ou PositiveIntegerField.)

Este campo deve ser do mesmo tipo como a chave primária dos modelos que estarão envolvidos na relação genérico . Por exemplo, se você usar IntegerField, você não será capaz de formar uma relação genérica com um modelo que usa um CharField como uma chave primária.

Mas por que eles podem fazer isso e não eu?!

Graças.

PS:. Eu até tentei criar um AbstractBaseModel com estes três campos, tornando-abstract=True e usando isso (no caso de que tinha algo a ver com isso) ... mesmo erro

Foi útil?

Solução

Depois que eu digitei que realmente longa pergunta que eu olhei para o mysql e percebeu que o erro foi decorrente de:

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

Aparentemente, eu não posso ter as duas coisas. O que deixa me rasgadas. Vou ter que abrir uma nova pergunta sobre se é melhor deixar minhas opções object_pk aberta (suponho que eu usar um campo de texto como uma chave primária?) Ou melhor para fazer cumprir a unique_togetherness ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top