la documentazione di Django è abbastanza chiara su come conservare le stringhe vuote come "" piuttosto che NULL a livello di database (per cui v'è solo una possibile formato per i dati vuoti):Django ORM, CharField e vuoto = True
Nota i valori di stringa vuoti verranno sempre memorizzati come stringhe vuote, non come NULL. Usa null = True solo per i campi non stringa come interi, booleani e date. Per entrambi i tipi di campi, dovrai anche impostare blank = True se desideri consentire valori vuoti nei moduli, poiché il parametro null influisce solo sull'archiviazione del database (vedi vuoto).
Tuttavia, dopo aver aggiunto un nuovo campo, ho iniziato a incontrare IntegrityErrors sul nuovo campo (numero di telefono).
valore nullo nella colonna "phone_number" viola vincolo non nullo
Quel modello si presenta così con il nuovo campo (ho eseguito una migrazione tramite sud):
class Person(models.Model):
user = models.ForeignKey(User)
description = models.TextField(blank=True)
phone_number = models.CharField(blank=True)
I da quando (temporaneamente) risolto il problema impostando null = True su phone_number, ora ho centinaia di voci con stringhe vuote e un singolo valore NULL nel mio database. (Ho anche provato ad aggiungere default = '' al campo phone_number, ma stavo ancora vedendo i problemi di IntegrityError.)
In passato ho sempre usato MySQL, ma su questo progetto sto usando Postgres. Il tentativo di inserimento SQL generato è:
'INSERT INTO "people_person" ("user_id", "description", "gender", "birthdate", "default_image_id", "zip_code", "beta_status") VALUES (%s, %s, %s, %s, %s, %s, %s) RETURNING "people_person"."id"'
.
La mia aspettativa sarebbe che Django inserisse una stringa vuota nella colonna "phone_number", ma non sembra che lo stia facendo. L'altra cosa che potrei aspettarmi sarebbe che Django includa un SET DEFAULT nell'istruzione CREATE TABLE, ma non lo fa. Così Postgres si arrabbia per il NOT NULL su quella colonna.
Grazie!
la stessa cosa sembra accadere se si passa un 'None' al costruttore (quindi, alla creazione) –