Pregunta

Estoy trabajando para usar el marco ContentType de django para crear algunas relaciones genéricas para mis modelos; después de ver cómo lo hacen los desarrolladores de django en django.contrib.comments.models pensé que imitaría su enfoque / convenciones:

de django.contrib.comments.models , línea 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")

Eso está tomado de su fuente y, por supuesto, su fuente funciona para mí (tengo comentarios con object_pk almacenados muy bien (enteros, en realidad); sin embargo, recibo un error durante syncdb en la tabla creación que termina:

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

¿Alguna idea de por qué pueden hacerlo y yo no?

Después de mirar alrededor, noté que los documentos estado real:

  

Dele a su modelo un campo que pueda almacenar un valor de clave principal de los modelos con los que se relacionará. (Para la mayoría de los modelos, esto significa un IntegerField o PositiveIntegerField).

     

Este campo debe ser del mismo tipo que la clave principal de los modelos que estarán involucrados en la relación genérica . Por ejemplo, si usa IntegerField, no podrá formar una relación genérica con un modelo que use un CharField como clave principal.

¡Pero por qué pueden hacerlo ellos y yo no!

Gracias.

PD: Incluso intenté crear un AbstractBaseModel con estos tres campos, convirtiéndolo en abstract = True y usándolo (en caso de que tuviera algo que ver con eso) ... mismo error.

¿Fue útil?

Solución

Después de escribir esa pregunta realmente larga, miré el mysql y me di cuenta de que el error provenía de:

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

Aparentemente, no puedo tener las dos cosas. Lo que me deja desgarrado. Tendré que abrir una nueva pregunta sobre si es mejor dejar abiertas mis opciones de object_pk (¿supongo que uso un campo de texto como clave principal?) O mejor para aplicar unique_togetherness ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top