Python/Django 遍历 ManyToMany 关联字段

1 投票
1 回答
2143 浏览
提问于 2025-04-18 02:11

我需要一些帮助,遇到了一些问题。

我有三个模型,分别是参考(Reference)、关系(Relation)和电路(Circuit)。关系是第一个模型的一个内嵌部分。电路和关系是有关联的。我的任务是这样的:

  • 我在参考1中,选择了一些电路,这些电路是在我的关系1到关系N中。
  • 当我保存的时候,我需要保存关系1到关系N,以及另一个关系(RelationFirst),这个关系是在保存参考模型时创建的,它必须包含该参考下所有其他关系中的电路。

我现在的代码是这样的,但并没有实现这个功能:

class Reference(models.Model):
    title = models.CharField(max_length=200, verbose_name = _('title'))

    def __unicode__(self):
        return u"\n %s" %(self.title)

    def save(self, force_insert=False, force_update=False, *args, **kwargs):
        is_new = self.id is None
        super(Reference, self).save(force_insert, force_update, *args, **kwargs)
        if is_new:  
            Relation.objects.create(reference=self, first = True)
            relation = Relation.objects.get(reference=self, first = True)
            circuit = Circuit.objects.get(name = '0')
            relation.circuit.add(circuit)


class Relation(models.Model):
    first = models.BooleanField()
    reference = models.ForeignKey(Reference)
    circuit = models.ManyToManyField('Circuit', verbose_name = _('Circuits'), null=True, blank=True, related_name = 'relation_circuit')

    def __unicode__(self):
        return u"%s" %(self.reference)

    def save(self, force_insert=False, force_update=False, *args, **kwargs):
        relation1 = Relation.objects.get(reference=self.reference, first = True)
        super(Relation, self).save(force_insert, force_update, *args, **kwargs)
        for circ in self.circuits:
            circuit = Circuit.objects.get(pk = circ)
            relation1.circuit.add(circuit)

有没有人能帮帮我?因为我无法遍历ManyToManyRelatedField,我不知道该怎么做。非常感谢!

1 个回答

3

你应该这样做:

for circ in self.circuit.all():

撰写回答