Frage

Ich arbeite Djangos Content Rahmen zu schaffen, einige allgemeine Beziehungen für eine meiner Modelle zu verwenden; nach einem Blick auf, wie die django Entwickler tun es bei django.contrib.comments.models dachte ich, dass ich ihren Ansatz / Konventionen nachahmen würde:

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

Das ist genommen von ihrer Quelle und, natürlich, ihre Quelle funktioniert für mich (ich habe Kommentare mit object_pk des gespeicherten gerade fein (ganzen Zahlen, tatsächlich), aber bekomme ich einen Fehler während syncdb auf Tabellenerstellung, die endet:

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

Alle Ideen, warum sie es tun und ich nicht?

Nach etwas bemerkte ich, dass die Dokumentation tatsächlich Zustand:

  

Geben Sie Ihr Modell ein Feld, das einen Primärschlüsselwert aus den Modellen speichern können Sie zu beziehen werden. (Für die meisten Modelle bedeutet dies eine Integer oder PositiveIntegerField.)

     

Dieses Feld muss der sein, der gleichen Typs wie der Primärschlüssel der Modelle, die in der generischen Beziehung beteiligt sein werden . Zum Beispiel, wenn Sie verwenden Integer, werden Sie nicht eine generische Beziehung mit einem Modell zu bilden die Lage sein, die einen CharField als Primärschlüssel verwendet wird.

Aber warum kann sie es tut und nicht ich?!

Danke.

PS:. Ich habe sogar versucht, eine AbstractBaseModel mit diesen drei Bereichen zu schaffen, so dass es abstract=True und die Verwendung dieses (für den Fall, dass etwas mit ihm zu tun hatte) ... gleiche Fehler

War es hilfreich?

Lösung

Nachdem ich getippt, dass wirklich lange Frage, die ich an der mysql sah und erkennen, dass der Fehler aus wurde ergeben:

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

Offenbar kann ich es nicht beides haben. Was lässt mich zerrissen. Ich werde eine neue Frage öffnen müssen, ob es besser ist, meine object_pk Optionen offen (nehme ich als Primärschlüssel verwenden, um ein Textfeld?) Zu verlassen oder besser die unique_togetherness zu erzwingen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top