【问题标题】:Python/Django Iterate ManyToMany Related FieldsPython/Django 迭代多对多相关字段
【发布时间】:2014-04-10 12:25:55
【问题描述】:

我需要一些帮助来解决一个问题。

我有三个模型,参考、关系和电路。关系是第一个的内联。电路和关系是相关的。我要做的是: - 我在参考 1 中,我在 Relation1 到 RelationN 中选择了一些电路。 - 当我保存时,我需要将 Relation1 保存到 RelationN,以及其他必须包含该引用的其他关系中存在的所有电路的 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,也不知道怎么做。非常感谢!

【问题讨论】:

    标签: python django manytomanyfield related-content


    【解决方案1】:

    你应该这样做:

    for circ in self.circuit.all():
    

    【讨论】:

    • 具体做什么?应该更改代码的哪一部分?这如何解决OP问题?此回复中缺少这些内容。
    • 您想重新发布一个字符串的所有代码吗?所以它必须在第三个字符串的 Relation 类的保存方法中。
    • 没有。但是通过查看您的帖子,没有任何关于正在解决的问题的线索。你可以说:你代码中的问题是for circ in self.circuit:。它不起作用,因为等等等等……你应该改用for circ in self.circuit.all():
    • 感谢您的建议
    • 不工作。 self.circuit.all() 是空的,它不应该是。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2020-06-08
    • 1970-01-01
    • 2017-05-21
    • 2015-10-03
    • 1970-01-01
    • 2013-02-26
    • 2013-04-27
    相关资源
    最近更新 更多