sql >> Databasteknik >  >> RDS >> PostgreSQL

Django-fixturen misslyckas, med angivande av DatabaseError:värdet är för långt för att typtecken varierar (50)

Uppdatering:gränsen på 50 tecken är nu 255 i Django 1.8

--

Ursprungligt svar:

Jag stötte precis på detta i eftermiddags också, och jag har en fix (av slag)

Det här inlägget här antydde att det är en Django-bugg som har att göra med längden på det tillåtna värdet för auth_permission. Ytterligare grävande backar upp den idén, liksom den här Django-biljetten (även om den från början är MySQL-relaterad).

Det är i grunden att ett behörighetsnamn skapas baserat på verbose_name för en modell plus en beskrivande behörighetssträng, och som kan svämma över till fler än de 50 tecken som tillåts i auth.models.Permission.name.

För att citera en kommentar om Django-biljetten:

De längsta prefixen för strängvärdet i kolumnen auth_permission.name är "Can change " och "Can delete ", båda med 11 tecken. Kolumnens maximala längd är 50 så den maximala längden på Meta.verbose_name är 39.

En lösning skulle vara att hacka den kolumnen för att stödja> 50 tecken (helst via en sydlig migrering, säger jag, så att den är lätt att repetera) men den snabbaste, mest tillförlitliga fixen jag kunde tänka mig var helt enkelt att göra min extra långa verbose_name-definition mycket kortare (från 47 tecken i verbose_name till cirka 20). Allt fungerar bra nu.



  1. Hur man skapar en lagrad procedur i SQL Server

  2. Hur väljer jag effektivt det tidigare icke-nullvärdet?

  3. NLS_UPPER() Funktion i Oracle

  4. Oracle SQL:Kolumn inte tillåten