2013-07-23 11 views
10

Mam następujący model w Django 1.5:Django model blank = False nie działa?

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

Należy zauważyć, że zgodnie z https://docs.djangoproject.com/en/dev/ref/models/fields/ name.blank jest domyślnie Fałsz co oznacza, że ​​musi być określona.

Jednak mogę z powodzeniem utworzyć obiekt Person następująco:

Person.objects.create() 

Wskazówka nazwa nie jest określona. Co się dzieje?

Ok, odpowiedź jest z docs:

pamiętać, że jest inna niż null. null jest wyłącznie związany z bazą danych, podczas gdy puste jest związane z walidacją. Jeśli pole ma puste = True, zatwierdzenie formularza pozwoli wprowadzić pustą wartość. Jeśli pole ma puste = Fałsz, pole będzie wymagane.

Kolejny haczyk:

Zauważ, że Walidatory nie zostanie uruchomiony automatycznie po zapisaniu modelu, ale jeśli używasz ModelForm, będzie uruchamiać weryfikatorów na wszelkich polach, które są wliczone w cenę Formularz.

Twoim obowiązkiem jest wywoływanie czystych metod przed zapisaniem, jeśli nie korzystasz z formularza.

+0

Po pierwsze, co jest z tym ' name = ... 'NIE rób tego. –

+0

co masz na myśli? – Lucas

+0

Wierzę, że gry odnoszą się do wcięcia. Nie jest zalecana praktyka kodowania według PEP-8. – bernie

Odpowiedz

9

blank stosuje się tylko do tworzenia walidacji pola jak w admin, formularze Django itp
null drugiej strony jest pustych kolumna poziom bazy danych.

Jak, dlaczego puste skutkuje domyślnie '', miałem naprawdę tylko przyjął to jako „tak właśnie to działa”, ale tutaj, gdzie wydaje się być w 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

Nigdy tego nie wiedziałem. Nauczyłem się czegoś nowego. –

+0

@Yuji masz rację. Z dokumentów: Zauważ, że jest to wartość inna niż zerowa. null jest wyłącznie związany z bazą danych, podczas gdy puste jest związane z walidacją. Jeśli pole ma puste = True, sprawdzanie poprawności formularza pozwoli wprowadzić pustą wartość. Jeśli pole ma puste = Fałsz, pole będzie wymagane. – Lucas

0

Django tworzy użytkownika z pustym ciągiem znaków. Możesz faktycznie uruchomić Person.objects.all() i da ci listę, jeśli zapiszesz ją w zmiennej o nazwie user_list i zrobisz coś takiego jak user_list[0], zwróci obiekt użytkownika z pustym łańcuchem. Nie wiem jak i dlaczego to robi.