Domanda

Sto lavorando per utilizzare il framework ContentType di django per creare alcune relazioni generiche per i miei modelli; dopo aver visto come gli sviluppatori di django lo fanno su django.contrib.comments.models ho pensato di imitare il loro approccio / convenzioni:

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

È preso dalla loro fonte e, ovviamente, la loro fonte funziona per me (ho commenti con object_pk è archiviato bene (numeri interi, in realtà); tuttavia, ricevo un errore durante syncdb sulla tabella creazione che termina:

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

Qualche idea sul perché possano farlo e io no?

Dopo essermi guardato intorno, ho notato che the docs indica effettivamente:

  

Assegna al tuo modello un campo in grado di memorizzare un valore di chiave primaria dai modelli a cui ti riferirai. (Per la maggior parte dei modelli, ciò significa IntegerField o PositiveIntegerField.)

     

Questo campo deve essere dello stesso tipo della chiave primaria dei modelli che saranno coinvolti nella relazione generica . Ad esempio, se si utilizza IntegerField, non sarà possibile formare una relazione generica con un modello che utilizza un CharField come chiave primaria.

Ma perché possono farlo e non io?!

Grazie.

PS: ho anche provato a creare un AbstractBaseModel con questi tre campi, rendendolo abstract = True e usando quello (nel caso in cui avesse qualcosa a che fare con esso) ... stesso errore.

È stato utile?

Soluzione

Dopo aver scritto quella domanda molto lunga, ho guardato il mysql e ho capito che l'errore derivava da:

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

Apparentemente, non posso averlo in entrambi i modi. Questo mi lascia strappato. Dovrò aprire una nuova domanda se è meglio lasciare aperte le mie opzioni object_pk (supponiamo che io usi un campo di testo come chiave primaria?) O meglio per applicare unique_togetherness ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top