Sử dụng Django 1.5.1. Python 2.7.3.Django độc đáo cùng nhau hạn chế thất bại?
Tôi muốn thực hiện một ràng buộc duy nhất với nhau bằng một trường khóa ngoài và một trường slug. Vì vậy, trong meta mô hình của tôi, tôi đã làm
foreign_key = models.ForeignKey("self", null=True, default=None)
slug = models.SlugField(max_length=40, unique=False)
class Meta:
unique_together = ("foreign_key", "slug")
Tôi thậm chí đã kiểm tra mô tả bảng trong Postgres (9.1) và ràng buộc được đưa vào bảng cơ sở dữ liệu.
-- something like
"table_name_foreign_key_id_slug_key" UNIQUE CONSTRAINT, btree (foreign_key_id, slug)
Tuy nhiên, tôi vẫn có thể lưu vào bảng cơ sở dữ liệu ngoại tuyến của chuỗi Không có/null và trùng lặp.
Ví dụ,
tôi đầu vào và có thể tiết kiệm
# model objects with slug="python" three times; all three foreign_key(s)
# are None/null because that is their default value
MO(slug="python").save()
MO(slug="python").save()
MO(slug="python").save()
Vì vậy, sau khi sử dụng unique_together, tại sao tôi có thể vẫn đầu vào ba trong số hàng có giá trị giống nhau không?
Tôi chỉ đoán là có thể phải làm với giá trị mặc định là Không cho trường ngoại lệ, bởi vì trước unique_together, khi tôi chỉ có duy nhất = True trên slug, mọi thứ đều hoạt động tốt. Vì vậy, nếu đó là trường hợp, những gì giá trị mặc định tôi nên có mà chỉ ra một giá trị null, nhưng cũng duy trì các ràng buộc duy nhất?
làm cách nào để sửa lỗi này? Có một giá trị tôi có thể gán cho lĩnh vực khóa ngoại hoặc một cái gì đó như duy nhất trên slug nếu khóa nước ngoài là NULL? – Derek
Vui lòng xem cập nhật. – Yossi
Có một giá trị mặc định cho khóa ngoại trong bưu phí sao cho giá trị sẽ không bao giờ được sử dụng một cách tự nhiên? – Derek