PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Il dispositivo Django non riesce, indicando DatabaseError:valore troppo lungo per il tipo di carattere variabile(50)

Aggiornamento:il limite di 50 caratteri è ora 255 in Django 1.8

--

Risposta originale:

L'ho incontrato solo questo pomeriggio e ho una soluzione (una specie)

Questo post qui implica che si tratta di un bug di Django che ha a che fare con la lunghezza del valore consentito per auth_permission. Ulteriori ricerche supportano questa idea, così come questo ticket Django (anche se inizialmente è correlato a MySQL).

Fondamentalmente è che un nome di autorizzazione viene creato in base al verbose_name di un modello più una stringa di autorizzazione descrittiva e che può superare i 50 caratteri consentiti in auth.models.Permission.name.

Per citare un commento sul biglietto Django:

I prefissi più lunghi per il valore della stringa nella colonna auth_permission.name sono "Può cambiare" e "Può eliminare", entrambi con 11 caratteri. La lunghezza massima della colonna è 50, quindi la lunghezza massima di Meta.verbose_name è 39.

Una soluzione sarebbe quella di hackerare quella colonna per supportare> 50 caratteri (idealmente tramite una migrazione a sud, dico, in modo che sia facilmente ripetibile) ma la soluzione più rapida e affidabile a cui potevo pensare era semplicemente quella di creare la mia definizione verbose_name extra-lunga molto più breve (da 47 caratteri nel verbose_name a circa 20). Adesso funziona tutto bene.