2011-09-27 29 views
7

Trovo che quando inserisco nulla di una stringa form field attraverso un modulo lo cattura come una stringa vuota ''.django stringa vuota e vuota

Tuttavia quando non inserisco nulla di un numero intero form field attraverso un modulo lo cattura come [null].

Questa è una buona pratica? La stringa dovrebbe essere null nel db?

risposta

5

È buona pratica. Se le stringhe potevano essere null, ci sarebbero due modi per avere una stringa vuota: null e "". Questo ti dà più valori da controllare, che è inefficiente e disordinato.

Questo è un Django convention, ma è buona prassi in tutte le applicazioni, a meno che non si ha la necessità di null a significare qualcosa di diverso rispetto"".

+7

Se nel mio database ho impostato un campo su ALLOW NULL, quindi mi aspetto che nessuno venga memorizzato come NULL, non una stringa vuota. Va bene per Django avere le sue convenzioni, ma Django non è necessariamente l'unico sistema che accede al database. Se un'applicazione separata può memorizzare NULL, si finisce per dover ancora controllare la stringa vuota vs vuota. Comunque un semplice 'if not value' controllerà entrambi in Python. – six8

+6

Potrebbe essere "pratica django", ma nei database in generale usare la stringa vuota per rappresentare i dati mancanti è una cattiva pratica. Ecco a cosa serve NULL. Spero davvero che questa non fosse una pratica standard nel django. – Darren

+0

Non è una buona pratica è una convenzione introdotta nei primi giorni, per non dover gestire 'Nessuno' nei modelli e non dover pulire i campi del modulo vuoto in' Nessuno'. Era una scorciatoia per fare le cose rapidamente, ma dovremmo giustificarlo come una buona pratica ora, perché era la pigrizia o la mancanza di tempo che ci ha portato questa "pratica". Ecco perché ora abbiamo 2 attributi di campo che gestiscono questa roba. –

1

Penso che la stringa dovrebbe essere anche NULL, ma dipende dall'applicazione vedi MySQL, better to insert NULL or empty string?.

Se si desidera memorizzare NULL per un campo vuoto, aggiungere null=True al campo in questione. Vedi https://docs.djangoproject.com/en/dev/ref/models/fields/#null

+2

che non è corretto ... – zentenk

+0

Come è errato? – six8

+2

Preferisco sapere se il valore è stato impostato, anche se l'ho impostato su una stringa vuota rispetto a non impostata (null). Questo ovviamente dipende dalle tue preferenze e/o dalla tua applicazione. In ogni caso, ho dato la mia opinione sulle migliori pratiche e ho dato istruzioni su come abilitarlo con Django. – six8

0

Dipende dall'attributo field.empty_strings_allowed.

Alcuni campi hanno precedenza su False. Ma CharField lo mantiene True, rendendo così Field._get_default restituisce una stringa vuota come predefinita, anche se blank=True. L'unico modo per ottenere None come predefinito è avere null=True su un campo.

Quindi, se in db è presente un campo che non dovrebbe mai essere nullo e non consentire mai l'inserimento di spazi vuoti in esso da ad es. objects.create. Devi inserire self.full_clean() - o altra validazione - nel metodo save.