Một chuỗi không phải là một số nguyên; và một chuỗi trống không phải là None
hoặc NULL
. Những gì bạn cần làm là bắt những trường hợp trường trống và sau đó truyền nó thành None
.
foo = "something" # "something" is coming from your CSV file
try:
val = int(foo)
except ValueError:
# foo is something that cannot be converted to
# a number. It could be an empty string, or a
# string like 'hello'
# provide a default value
val = None
# Now use val to insert into the database
f = MyModel()
f.age = val
f.save()
blank
hoàn toàn dành cho xác thực giao diện người dùng; nó không có bất kỳ tác động nào đến phía cơ sở dữ liệu:
null
mặt khác, liên quan đến cơ sở dữ liệu:
Một IntegerField
yêu cầu giá trị có thể được chuyển đổi thành số nguyên, vì vậy khi bạn chuyển vào chuỗi trống , nó không thể cast nó và tạo ra một ngoại lệ. Thay vào đó, nếu bạn nhập None
và bạn có age = models.IntegerField(null=True)
, nó biết để lưu trữ nó một cách chính xác.
Tóm lại:
-
age = models.IntegerField()
Trường là bắt buộc và cần giá trị số nguyên hợp lệ. Nó sẽ không chấp nhận
None
và sẽ không có giá trị rỗng trong cơ sở dữ liệu. Các giá trị hợp lệ là -2147483648 đến 2147483647 -
age = models.IntegerField(null=True)
Trường là bắt buộc (xác thực biểu mẫu). Nếu trường có
None
dưới dạng một giá trị, nó sẽ được dịch thànhNULL
trong cơ sở dữ liệu. -
age = models.IntegerField(blank=True, null=True)
Trường không bắt buộc (xác thực biểu mẫu). Nếu trường được chuyển vào
None
, nó sẽ được dịch sangNULL
-
age = models.IntegerField(blank=True)
Trường không bắt buộc (xác thực biểu mẫu), nhưng một giá trị số nguyên hợp lệ cần được chuyển vào vì cơ sở dữ liệu không chấp nhận null. Thông thường ở đây, bạn sẽ đặt nó một giá trị mặc định với
default=0
hoặc thực hiện một số xác thực trước khi gửi giá trị cho orm.