2013-06-19 11 views
13

Do tej pory nie znalazłem jasnego wyjaśnienia pustego, zerowego i wymaganego - w modelach i formularzach Django.Puste, puste i wymagane w modelach Django i ModelForms


wiem domyślny dla każdego jest następujący:

blank = False 
null = False 
required = True 

wiem też, że:

blank=True (stosowany w models.py), to znaczy na formularzu poziom, akceptuj puste formularze - powiązane pole nie jest wymagane w formularzu.

(używany w models.py), oznacza, że ​​na poziomie bazy danych puste ciągi będą przechowywane jako NULL w przeciwieństwie do pustej wersji skojarzonego typu danych.

required=False (używane w forms.py), oznacza, że ​​powiązane pole formularza nie jest wymagane.


Mam nadzieję, że powyższe informacje będą służyć innym dobrze (proszę dać mi znać, jeśli są jakieś błędy w logice, i będę ją aktualizować).

Moje pytanie jest następujące:

Kiedy mam wiedzieć kiedy użyć blank=True Vs. required=False. Jeśli moim celem jest uczynienie pola formularza niewymaganym, mogę zdefiniować to w modelu przy użyciu blank=True, lub mogę zdefiniować to w formularzu przy użyciu required=False. Czy to oznacza, że ​​można zdefiniować blank=True w modelu, a w powiązanym ModelForm zastąpić to z required=True?

Też się odnoszą, jeśli chodzi o używanie regularnego formularza (forms.Form)? Ponieważ forma nie jest powiązana z modelem (inaczej niż poprzez logikę widoku), co się stanie, jeśli znowu się zaprzeczą?

+0

Kiedy * co * jest sprzeczne z czym, jeśli formularz nie jest powiązany z modelem. –

Odpowiedz

2

To zależy od wymagań. Kiedyś zdecydujemy później, aby pole było obowiązkowe w formularzu, chociaż na modelu nadal nie jest wymagane. Ale formularz zapewni wypełnienie pola.

Możesz mieć null=True na modelu, a następnie możesz uczynić to pole obowiązkowe w formularzu. Nie można jednak utworzyć pola opcjonalnego w formularzu, gdy jest ono obowiązkowe w modelu, co spowoduje błąd bazy danych w późniejszym czasie.

+0

Pole będzie obowiązkowe w formularzu, jeśli w modelu jest 'null = True'. Tylko 'blank = True' w Modelu ustawia' required = False' w odpowiednim ModelForm.Zostałem spalony przez ten nieintuicyjny aspekt form modeli przed – krypto07

7

Sprzeczności nie mają znaczenia. Myślę, że to przynosi elastyczność w rozwoju aplikacji Django. Na przykład, jeśli używasz biblioteki firm trzecich, która definiuje niektóre modele, i ustawiają one blank=True, ale do innych celów potrzebujesz tego pola, które jest obowiązkowe, wtedy w twoich formularzach możesz je naprawić bez dotykania kodu biblioteki strony trzeciej.

To tylko dodaje pewną elastyczność ramowej IMHO, która nie przynosi szkody. Możesz go użyć do własnych celów. Sprzeczności nie są znaczące.

Mam nadzieję, że to pomoże!

+0

Jeszcze raz dziękuję, to ma sens, a także daje o wiele więcej mocy formom. – Joker

+0

Serdecznie zapraszamy :) –

+2

To wspaniała odpowiedź, która wyjaśnia przyczynę i jej przypadek użycia. – flyingfoxlee

Powiązane problemy