PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Django-Fixture schlägt fehl und gibt DatabaseError an:Wert zu lang für Typzeichen variiert (50)

Update:Die 50-Zeichen-Grenze beträgt jetzt 255 in Django 1.8

--

Ursprüngliche Antwort:

Ich bin heute Nachmittag auch darauf gestoßen, und ich habe (eine Art) eine Lösung gefunden

Dieser Beitrag hier impliziert, dass es sich um einen Django-Fehler handelt, der mit der Länge des für auth_permission zulässigen Werts zu tun hat. Weiteres Graben unterstützt diese Idee, ebenso wie dieses Django-Ticket (obwohl es ursprünglich MySQL-bezogen ist).

Im Grunde genommen wird ein Berechtigungsname basierend auf dem verbose_name eines Modells plus einer beschreibenden Berechtigungszeichenfolge erstellt und kann mehr als die in auth.models.Permission.name erlaubten 50 Zeichen umfassen.

So zitieren Sie einen Kommentar zum Django-Ticket:

Die längsten Präfixe für den String-Wert in der Spalte auth_permission.name sind „Can change“ und „Can delete“, beide mit 11 Zeichen. Die maximale Spaltenlänge beträgt 50, daher beträgt die maximale Länge von Meta.verbose_name 39.

Eine Lösung wäre, diese Spalte zu hacken, um> 50 Zeichen zu unterstützen (idealerweise über eine Süd-Migration, sage ich, damit es leicht wiederholbar ist), aber die schnellste und zuverlässigste Lösung, die ich mir vorstellen konnte, war, einfach meine extra lange verbose_name-Definition zu erstellen viel kürzer (von 47 Zeichen im verbose_name auf etwa 20). Alles funktioniert jetzt einwandfrei.