tài liệu của Django là khá rõ ràng về việc lưu trữ chuỗi rỗng như "" chứ không phải là NULL ở mức cơ sở dữ liệu (như vậy chỉ có một khả năng định dạng cho dữ liệu trống):Django ORM, CharField và trống = True
Note giá trị chuỗi trống sẽ luôn được lưu trữ dưới dạng chuỗi rỗng, không phải là NULL. Chỉ sử dụng null = True cho các trường không phải chuỗi như số nguyên, booleans và ngày tháng. Đối với cả hai loại trường, bạn cũng sẽ cần phải đặt trống = True nếu bạn muốn cho phép giá trị trống trong biểu mẫu, vì tham số null chỉ ảnh hưởng đến bộ nhớ cơ sở dữ liệu (xem trống).
Tuy nhiên, sau khi thêm trường mới, tôi đã bắt đầu gặp phải IntegrityErrors trên trường mới (số điện thoại).
giá trị null trong cột "PHONE_NUMBER" vi phạm chế không null
Đó là mô hình trông như thế này với lĩnh vực mới (tôi đã thực hiện một sự chuyển đổi qua phía nam):
class Person(models.Model):
user = models.ForeignKey(User)
description = models.TextField(blank=True)
phone_number = models.CharField(blank=True)
tôi kể từ khi (tạm thời) giải quyết vấn đề bằng cách thiết lập null = True trên phone_number, nhưng bây giờ tôi có hàng trăm mục có chuỗi rỗng, và một giá trị NULL duy nhất trong cơ sở dữ liệu của tôi. (Tôi cũng đã thử thêm mặc định = '' vào trường số điện thoại, nhưng tôi vẫn thấy sự cố IntegrityError.)
Trước đây tôi đã sử dụng MySQL, nhưng trong dự án này tôi đang sử dụng Postgres. Nỗ lực chèn SQL được tạo ra là:
'INSERT INTO "people_person" ("user_id", "description", "gender", "birthdate", "default_image_id", "zip_code", "beta_status") VALUES (%s, %s, %s, %s, %s, %s, %s) RETURNING "people_person"."id"'
.
Mong đợi của tôi là Django sẽ chèn một chuỗi trống vào cột "số điện thoại", nhưng có vẻ như không làm như vậy. Điều khác tôi có thể mong đợi sẽ là Django để bao gồm một DEFAULT SET trong câu lệnh CREATE TABLE, nhưng nó không. Vì vậy, Postgres tức giận về NOT NULL trên cột đó.
Cảm ơn!
điều tương tự dường như xảy ra nếu bạn chuyển 'None' cho hàm tạo (do đó, khi tạo) –