ปัญหาการทำความสะอาดโมเดล django

ฉันกำลังทำงานในสองโมเดลที่แบ่งตามหลายต่อหลาย นี่คือโค้ดที่เกี่ยวข้อง:

class Curso(models.Model):
    horarios = models.ManyToManyField(Horario, related_name = 'cursos')
    ...
    def clean(self):
       ...
       self.horarios.all()
    def save(self,*args,**kwargs):
        self.full_clean()
        ...

Horarios ถูกกำหนดไว้แล้ว ตอนนี้เมื่อฉันพยายามสร้าง curso ในส่วนต่อประสานผู้ดูแลระบบ ฉันได้รับข้อผิดพลาดที่ชี้ไปที่ self.horarios.all():

'Curso' instance needs to have a primary key value before a many-to-many relationship can be used.

และมันก็สมเหตุสมผลแล้วที่ยังไม่ได้บันทึก ดังนั้นปัญหาของฉันคือ ฉันจะเข้าถึงค่า horarios ในอินสแตนซ์ Curso ปัจจุบันที่กำลังถูกบันทึกได้อย่างไร

ขอบคุณล่วงหน้า


person loki    schedule 16.05.2012    source แหล่งที่มา
comment
โมเดล Horario จะไม่มีวิธีการแบบ clean ของตัวเองหรือ? เหตุใดคุณจึงต้องทำงานกับมันในวิธี Curso clean?   -  person jdi    schedule 17.05.2012
comment
@jdi horario = ตารางเวลา ฉันต้องการให้ horario ไม่ให้ปรากฏบนอินสแตนซ์ Curso บางตัวในเวลาเดียวกัน นั่นคือวิธีที่ฉันตรวจสอบความถูกต้องและวนซ้ำพวกมัน   -  person loki    schedule 17.05.2012
comment
รายการซ้ำที่เป็นไปได้: stackoverflow.com/questions/6090859/   -  person jdi    schedule 17.05.2012


คำตอบ (1)


ข้อผิดพลาดดูเหมือนตรงไปตรงมาสำหรับฉัน - คุณไม่สามารถโทร ManyToMany ก่อนที่วัตถุจะถูกบันทึก

คุณสามารถทำซ้ำข้อผิดพลาด: Curso().horarios

เห็นได้ชัดว่าคุณไม่สามารถทำการตรวจสอบความสัมพันธ์ที่ไม่สามารถมีอยู่ได้ ดังนั้นเพียงแค่ล้อมการโทรของคุณใน if self.pk

if self.pk:
   self.horarios.all()
person Yuji 'Tomita' Tomita    schedule 17.05.2012