2009-02-15 114 views
4

我有一位居民,并且似乎无法获得居民所属的SSA集。我试过res.ssa_set.all().ssas_set.all().ssa_resident_set.all()。似乎无法管理它。通过另一个表进行反向m2m查找的语法是什么?Django模型API通过中间表进行多对多关系反向查找

编辑:我得到'查询集作为没有属性'的错误。呃?

class SSA(models.Model): 
    name = models.CharField(max_length=100) 
    cost_center = models.IntegerField(max_length=4) 
    street_num = models.CharField(max_length=9) 
    street_name = models.CharField(max_length=40) 
    suburb = models.CharField(max_length=40) 
    post_code = models.IntegerField(max_length=4, blank=True, null=True) 

    def __unicode__(self): 
     return self.name 

class Resident(models.Model): 
    cris_id = models.CharField(max_length=10, primary_key=True) 
    first_name = models.CharField(max_length=20) 
    last_name = models.CharField(max_length=20) 
    ssas = models.ManyToManyField('SSA', through='SSA_Resident', verbose_name="SSAs") 

    def __unicode__(self): 
     return self._get_full_name() 

    def _get_full_name(self): 
     return u"%s %s" %(self.first_name, self.last_name) 

    full_name = property(_get_full_name) 

class SSA_Resident(models.Model): 
    id = models.AutoField(primary_key=True) 
    resident = models.ForeignKey('Resident') 
    ssa = models.ForeignKey('SSA', verbose_name="SSA") 
    active = models.BooleanField(default=True) 
    def __unicode__(self): 
     return u"%s - %s" %(self.resident.full_name, self.ssa.name) 

回答

1

我试图评估一个查询集对象,而不是对象本身。在查询集上执行get,然后对关系集进行查找可以正常工作。我正在改变社区维基,并将其留在这里,只是因为别人像我一样愚蠢。

工作的示例:

resident = Resident.objects.filter(name='Johnny') 
resident.ssa_set.all() # fail 
resident = resident.get() # will fail if more than one returned by filter 
resident.ssa_set.all() # works, since we're operating on an instance, not a queryset 
+1

这个答案并没有给我太多的清晰度。你能提供一个工作的例子吗? – mlissner 2011-04-06 03:10:26

相关问题