【问题标题】:Django Model API reverse lookup of many to many relationship through intermediary tableDjango Model API通过中间表反向查找多对多关系
【发布时间】:2010-10-07 17:02:18
【问题描述】:

我有一个居民,但似乎无法获得该居民所属的 SSA 集。我试过res.ssa_set.all().ssas_set.all().ssa_resident_set.all()。好像管不了通过另一个表进行反向 m2m 查找的语法是什么?

编辑:我收到“QuerySet as no attribute”错误。嗯?

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)

【问题讨论】:

    标签: python django django-models many-to-many


    【解决方案1】:

    我试图评估一个查询集对象,而不是对象本身。在查询集上执行 get 然后查找关系集工作正常。我要改用社区 wiki 并把它留在这里,以防其他人和我一样愚蠢。

    一个工作示例:

    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
    

    【讨论】:

    • 这个答案并没有让我很清楚。您能否提供工作示例?
    • @mlissner,请参阅我的编辑。不过,这整个问题都很糟糕。你最好去别处看看,或者问比我最初提供的更详细的问题。
    猜你喜欢
    • 2016-09-15
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2011-10-09
    • 2018-01-30
    • 2016-04-18
    相关资源
    最近更新 更多