2011-09-27 41 views
7

Tôi thấy rằng khi tôi chèn không có gì của một chuỗi form field thông qua một biểu mẫu, nó nắm bắt nó như là một chuỗi rỗng ''.django null và trống chuỗi

Tuy nhiên, khi tôi không chèn gì vào số nguyên form field thông qua biểu mẫu, nó sẽ chụp số nguyên là [null].

Đây có phải là phương pháp hay không? Chuỗi có nên là null cũng như trong db không?

Trả lời

5

Thực hành tốt. Nếu chuỗi được phép là null, sẽ có hai cách để có một chuỗi trống: null"". Điều này mang lại cho bạn nhiều giá trị để kiểm tra, điều đó không hiệu quả và lộn xộn.

Đây là một Django convention, nhưng là thực hành tốt trong tất cả các ứng dụng, trừ khi bạn có nhu cầu null để ý nghĩa khác hơn "".

+7

Nếu trong cơ sở dữ liệu của tôi, tôi thiết lập một trường để ALLOW NULL, sau đó tôi mong đợi Không được lưu trữ như NULL, không phải là một chuỗi rỗng. Nó là tốt cho Django để có quy ước của nó, nhưng Django không nhất thiết phải là hệ thống duy nhất truy cập vào cơ sở dữ liệu. Nếu một ứng dụng riêng biệt có thể lưu trữ NULL thì bạn sẽ phải kiểm tra chuỗi rỗng so với rỗng. Tuy nhiên, một giá trị 'if not' đơn giản sẽ kiểm tra cả trong Python. – six8

+6

Nó có thể là 'django thực hành' nhưng trong cơ sở dữ liệu nói chung bằng cách sử dụng chuỗi rỗng để đại diện cho dữ liệu bị thiếu là thực hành xấu. Đó là những gì NULL là cho. Tôi thực sự muốn đây không phải là thực hành tiêu chuẩn trong django. – Darren

+0

Nó không phải là một thực hành tốt nó là một quy ước được giới thiệu trong những ngày đầu, vì không phải xử lý 'None' trong các mẫu và không phải làm sạch các trường mẫu trống thành' None'. Đó là một lối tắt để hoàn thành công việc một cách nhanh chóng, nhưng chúng ta nên biện minh cho nó như là một thực hành tốt ngay bây giờ, bởi vì nó là sự lười biếng hoặc thiếu thời gian cho chúng ta "thực hành" này. Đó là lý do tại sao chúng tôi hiện có 2 thuộc tính trường xử lý nội dung này. –

1

Tôi nghĩ chuỗi cũng phải là NULL, nhưng phụ thuộc vào ứng dụng của bạn, xem MySQL, better to insert NULL or empty string?.

Nếu bạn muốn lưu trữ NULL cho trường trống, hãy thêm null=True vào trường được đề cập. Xem https://docs.djangoproject.com/en/dev/ref/models/fields/#null

+2

không chính xác ... – zentenk

+0

Cách này không chính xác? – six8

+2

Tôi muốn biết giá trị đã được đặt hay chưa, ngay cả khi tôi đặt giá trị đó thành chuỗi trống không được đặt (null). Điều này tất nhiên phụ thuộc vào sở thích và/hoặc ứng dụng của bạn. Trong mọi trường hợp, tôi đưa ra ý kiến ​​của tôi về thực hành tốt nhất và đưa ra hướng dẫn về cách kích hoạt nó với Django. – six8

0

Tùy thuộc vào thuộc tính field.empty_strings_allowed.

Một số trường bị ghi đè lên False. Nhưng CharField giữ nó True, do đó làm cho Field._get_default trả lại chuỗi trống làm mặc định - ngay cả khi blank=True. Cách duy nhất để có được None làm mặc định là có null=True trên một trường.

Vì vậy, nếu bạn có trường trong db không được rỗng và không cho phép khoảng trống không bao giờ được đặt vào đó bằng ví dụ: objects.create. Bạn cần phải đặt self.full_clean() - hoặc xác thực khác - trong phương thức mô hình save.

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