ฉันจะทำให้ฟิลด์หลายต่อหลายตัวเลือกใน Django ได้อย่างไร


202

เมื่อคุณมีความสัมพันธ์หลายต่อหลายคน ( related_nameไม่ใช่through) และคุณกำลังพยายามใช้ส่วนต่อประสานผู้ดูแลระบบคุณจะต้องป้อนหนึ่งในความสัมพันธ์แม้ว่าคุณจะไม่จำเป็นต้องสร้างรายการแรก

ฉันกำลังสร้างแอพที่เป็นผู้จัดงาน ลองนึกภาพเรามีEventและGroupแบบจำลองที่ผูกพันกับความสัมพันธ์แบบหลายต่อหลายคน

Django related_nameสร้างตารางอื่นด้วยดัชนีของอีกสองตาราง
แต่ฉันเห็นเหตุผลว่าทำไมโต๊ะพิเศษนี้ได้ที่จะมีประชากร

ถ้าฉันทำงานกับฐานข้อมูลผ่าน phpMyAdmin ฉันสามารถสร้างได้Groupโดยไม่ต้องลงทะเบียนEventเนื่องจากการเชื่อมต่อระหว่างทั้งสองจะผ่านตารางแยกต่างหากเท่านั้นและไม่มีการบังคับใช้ค่าฐานข้อมูลในระดับที่กำหนด

ฉันจะทำให้อินเทอร์เฟซผู้ดูแลระบบรู้ได้อย่างไร
ฉันจะสร้างฟิลด์จำนวนมากต่อกลุ่มใน Django ได้อย่างไร

คำตอบ:


348

หากคุณต้องการที่จะระบุความสัมพันธ์ ManyToMany โดยไม่จำเป็นต้องใช้เพียงแค่ใช้blank=True:

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

7
วิธีนี้จะช่วยแก้ปัญหา การใช้ช่องว่างไม่ชัดเจนสำหรับฉันเพราะฉันคิดว่าหลาย ๆ คนสร้างตารางที่เชื่อมโยงเหตุการณ์กับกลุ่ม (events = models.ManyToManyField (กิจกรรม, related_name = "กลุ่ม", blank = True) ดังนั้นจึงไม่ชัดเจนที่จะใช้ ช่องว่างเนื่องจากกิจกรรมไม่ใช่เขตข้อมูลในตารางกลุ่มอย่างไรก็ตามมันทำงานได้ดีขอบคุณ !!!
DZ

9
@omouse ฉันคิดว่าใช่ blank สำหรับการตรวจสอบ django และ null สำหรับฐานข้อมูล ในกรณีแบบนี้ (เช่นสำหรับ IntegerField) มันไม่มีเหตุผลที่จะใส่อย่างใดอย่างหนึ่งโดยที่ฉันไม่คิดอย่างนั้น
lajarre

17
คุณต้องการที่จะมีจริงnull=Trueเหรอ? ฉันอยู่ภายใต้การแสดงผลnullไม่มีผลกระทบใด ๆ ในManyToManyฟิลด์: stackoverflow.com/questions/18243039/ …
Tyler Hayes

5
ใช่หนอ @TylerHayes พูดถูก null = True โดยทั่วไปแล้วเป็นแบบไม่ใช้งานและไร้สาระในบริบทของ ManyToMany ฉันเปิดให้แสดงว่าฉันเข้าใจผิด
Ben Roberts

7
null = ไม่จำเป็นต้องใช้ True อย่างน้อยจาก Django 1.5 เป็นต้นไป
Ville Laurikari
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.