Làm cách nào để biến nhiều lĩnh vực thành nhiều tùy chọn trong Django?


202

Khi bạn có mối quan hệ nhiều-nhiều ( related_namekhông phải through) và bạn đang cố gắng sử dụng giao diện quản trị, bạn bắt buộc phải nhập một trong các mối quan hệ mặc dù nó không phải tồn tại để bạn tạo mục nhập đầu tiên.

Tôi đang tạo một ứng dụng tổ chức sự kiện. Hãy tưởng tượng chúng ta đã có EventGroupcác mô hình, ràng buộc với mối quan hệ nhiều-nhiều.

Django related_nametạo một bảng khác với các chỉ số của hai bảng khác.
Nhưng tôi thấy không có lý do tại sao bảng bổ sung này phải được điền.

Nếu tôi làm việc với cơ sở dữ liệu thông qua phpMyAdmin, tôi có thể tạo Groupmà không cần đăng ký Event, vì kết nối giữa hai chỉ thông qua một bảng riêng biệt và không có thực thi giá trị cơ sở dữ liệu ở mức nhất định.

Làm thế nào để tôi làm cho giao diện quản trị này nhận ra nó?
Làm cách nào để biến trường nhiều thành nhiều tùy chọn trong Django?

Câu trả lời:


348

Nếu bạn muốn có thể chỉ định mối quan hệ ManyToMany mà không yêu cầu, chỉ cần sử dụng blank=True:

class Group(models.Model):
    ...
    events = models.ManyToManyField(Event, blank=True)

7
Điều này không giải quyết vấn đề. Việc sử dụng khoảng trống không rõ ràng đối với tôi vì tôi nghĩ rằng nhiều người đã tạo một bảng liên kết các sự kiện với các nhóm (event = model.ManyToManyField (Sự kiện, có liên quan = "nhóm", blank = True) Vì vậy không rõ ràng để sử dụng khoảng trống vì Sự kiện không thực sự là một trường trong bảng nhóm. Dù sao thì nó cũng hoạt động rất cảm ơn bạn !!!
DZ.

9
@omouse Tôi nghĩ là có, trống là để xác thực django và null cho cơ sở dữ liệu. Trong trường hợp này (như đối với IntegerField), thật vô nghĩa khi đặt cái này mà không có cái khác tôi nghĩ
lajarre

17
Bạn có thực sự cần phải có null=True? Tôi có ấn tượng nullkhông có bất kỳ ảnh hưởng nào đến ManyToManycác lĩnh vực: stackoverflow.com/questions/18243039/ Khăn
Tyler Hayes

5
Vâng, um @TylerHayes là đúng. null = True về cơ bản là không hoạt động và vô nghĩa trong bối cảnh ManyToMany. Tôi mở để được chỉ ra rằng tôi đã nhầm.
Ben Roberts

7
null = True là không bắt buộc, ít nhất là từ Django 1.5 trở đi.
Ville Laurikari
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.