2014-04-10 146 views
1

我需要一些问题的帮助。Python/Django迭代ManyToMany相关领域

我有三种模型,Reference,Relation ans Circuit。关系是第一个内联。电路和关系是相关的。我必须做的是: - 我在参考文献1中,并且我在Relation1中选择了一些Circuits到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,所以我不知道该怎么做。非常感谢你!

回答

3

你应该这样做的:

for circ in self.circuit.all(): 
+1

做究竟是什么?应该更改哪部分代码?这是如何解决OP问题的?这些回复中缺少的东西很少。 – UmNyobe

+0

你想重新发布一个字符串的所有代码?所以它必须在第3个字符串中保存Relation类的方法。 –

+0

不,但通过查看您的帖子,没有线索知道正在解决什么问题。你可以这样说:你的代码中的问题是'for self.circuit:'中的循环。它不工作,因为等等等等......你应该在self.circuit.all()中使用'for circ:'而不是 – UmNyobe