2013-07-23 14 views
10

Ho il seguente modello Django 1.5:Modello Django vuoto = Falso non funziona?

class Person(models.Model): 
    name = models.CharField(max_length=50) 

Nota che secondo https://docs.djangoproject.com/en/dev/ref/models/fields/ name.blank è di default False che significa che deve essere specificato.

Tuttavia, ho potuto creare correttamente un oggetto Person come segue:

Person.objects.create() 

Avviso il nome non è specificato. Cosa sta succedendo?

Ok, la risposta dalla documentazione è:

Si noti che questo è diverso da null. null è puramente correlato al database, mentre vuoto è correlato alla validazione. Se un campo è vuoto = True, la convalida del modulo consentirà l'immissione di un valore vuoto. Se un campo è vuoto = Falso, il campo sarà richiesto.

Un altro problema:

Nota che validatori non verrà eseguito automaticamente quando si salva un modello, ma se si utilizza un ModelForm, verrà eseguito i tuoi validatori su tutti i campi che sono inclusi nella vostra modulo.

È responsabilità dell'utente chiamare i metodi puliti prima di salvare se non si utilizza un modulo.

+0

In primo luogo, che cosa è con questo ' name = ... 'NON farlo. –

+0

cosa intendi? – Lucas

+0

Credo che Games si riferisca alla rientranza. Non è consigliata la pratica di codifica per PEP-8. – bernie

risposta

9

blank si applica solo per formare la convalida campo come nel admin, forme Django, ecc
null d'altra parte è una colonna nullable livello di database.

Per quanto riguarda il motivo per cui i risultati vuote in un predefinito '', avevo davvero solo accettato come "questo è il modo in cui funziona", ma qui è dove sembra essere in django.db.models.Field

def get_default(self): 
     """ 
     Returns the default value for this field. 
     """ 
     if self.has_default(): 
      if callable(self.default): 
       return self.default() 
      return force_unicode(self.default, strings_only=True) 
     if (not self.empty_strings_allowed or (self.null and 
        not connection.features.interprets_empty_strings_as_nulls)): 
      return None 
     return "" 
     #  ^this 
+0

Non lo sapevo mai. Ho imparato qualcosa di nuovo. –

+0

@Yuji hai ragione. Dai documenti: nota che questo è diverso da null. null è puramente correlato al database, mentre vuoto è correlato alla validazione. Se un campo ha spazio = True, la convalida del modulo consentirà l'inserimento di un valore vuoto. Se un campo è vuoto = Falso, il campo sarà richiesto. – Lucas

0

Django crea un utente con una stringa vuota. In realtà è possibile eseguire Person.objects.all() e ti darà un elenco, se lo salvi in ​​una variabile denominata e fai qualcosa come user_list[0], restituirà un oggetto utente con una stringa vuota. Non so come o perché lo fa.