2013-06-19 18 views
13

Cho đến nay tôi đã không đi qua một lời giải thích rõ ràng về trống rỗng, và yêu cầu - trong các mô hình và hình thức của Django.Trống, Null, và Bắt buộc trong Mô hình Django và ModelForms


Tôi biết các mặc định cho mỗi như sau:

blank = False 
null = False 
required = True 

tôi cũng biết rằng:

blank=True (sử dụng trong models.py), có nghĩa là về hình thức cấp, chấp nhận biểu mẫu trống - trường được liên kết không bắt buộc trong biểu mẫu.

null=True (được sử dụng trong models.py), có nghĩa là ở cấp cơ sở dữ liệu, các chuỗi trống sẽ được lưu trữ là NULL trái ngược với phiên bản trống của loại dữ liệu được liên kết.

required=False (được sử dụng trong forms.py), có nghĩa là trường biểu mẫu được liên kết không bắt buộc.


Hy vọng thông tin trên sẽ phục vụ tốt cho người khác (vui lòng cho tôi biết nếu có bất kỳ sai sót nào trong logic và tôi sẽ cập nhật).

Câu hỏi của tôi là như sau:

Khi nào tôi biết khi nào sử dụng blank=True vs required=False. Nếu mục tiêu của tôi là tạo trường biểu mẫu không bắt buộc, tôi có thể xác định trường này trong mô hình bằng cách sử dụng blank=True hoặc tôi có thể xác định điều này trong biểu mẫu bằng cách sử dụng required=False. Điều này có nghĩa là bạn có thể xác định blank=True trong một mô hình và trong liên kết ModelForm ghi đè điều này với required=True?

Cũng liên quan, bạn sẽ sử dụng biểu mẫu thông thường khi nào (forms.Form)? Vì biểu mẫu không liên kết với một mô hình (khác với thông qua logic xem), điều gì sẽ xảy ra nếu một lần nữa, chúng mâu thuẫn với nhau?

+0

Khi * điều gì * mâu thuẫn với điều gì, nếu biểu mẫu không được liên kết với mô hình. –

Trả lời

2

Tùy thuộc vào yêu cầu. Thỉnh thoảng chúng tôi quyết định sau đó để bắt buộc thực hiện lĩnh vực trên mẫu mặc dù trên mô hình nó vẫn không cần thiết. Nhưng biểu mẫu sẽ đảm bảo rằng trường phải được điền.

Bạn có thể có null=True trên mô hình và sau đó bạn có thể làm cho trường đó bắt buộc trên biểu mẫu. Nhưng bạn không thể tạo một trường tùy chọn trong biểu mẫu khi nó là bắt buộc trên mô hình mà sẽ dẫn đến lỗi cơ sở dữ liệu sau này.

+0

Trường sẽ là bắt buộc trên biểu mẫu nếu 'null = True' trong mô hình. Chỉ 'blank = True' trong các Model model' required = False' trong ModelForm tương ứng.Tôi đã bị đốt cháy bởi khía cạnh không trực quan của các mẫu biểu mẫu này trước – krypto07

7

Những mâu thuẫn không quan trọng. Tôi nghĩ điều này mang lại sự linh hoạt cho sự phát triển của một ứng dụng Django. Ví dụ: nếu bạn đang sử dụng thư viện của bên thứ ba xác định một số mẫu và đặt blank=True, nhưng đối với các mục đích khác bạn cần trường đó là bắt buộc, thì trong biểu mẫu, bạn có thể sửa nó mà không cần chạm vào mã thư viện của bên thứ ba.

Điều này chỉ thêm một số tính linh hoạt vào khung IMHO, điều đó không gây hại. Bạn có thể sử dụng nó cho mục đích của riêng bạn. Những mâu thuẫn không đáng kể.

Hy vọng điều này sẽ hữu ích!

+0

Cảm ơn một lần nữa, điều này có ý nghĩa và cũng mang lại nhiều quyền lực hơn cho các biểu mẫu. – Joker

+0

Bạn được chào đón nhiều nhất :) –

+2

Đó là một câu trả lời tuyệt vời, giải thích lý do và trường hợp sử dụng của nó. – flyingfoxlee

Các vấn đề liên quan