django很多人从其他对象获取属性

时间:2012-03-08 14:43:29

标签: django templates django-templates many-to-many

所以我现在一直在使用django,这很棒。我最近遇到了一个问题,我确信有一种糟糕的方式让它工作,但我发现Django的原因是他们通常建立各种各样的机制来做给你的东西。所以我找不到的是:

以下是我的模特:

class LandmarkGroup(models.Model):
    Name = models.CharField(max_length=150)
    Description = models.CharField(max_length=300, blank=True)
    IsActive = models.BooleanField(default=True)
    landmarks = models.ManyToManyField('Landmark', blank=True, null=True)

    def __unicode__(self):
            return self.Name

class Landmark(models.Model):
    Name = models.CharField(max_length=150)
    Description = models.CharField(max_length=300, blank=True)
    Polygon = models.PolygonField()
    IsActive = models.BooleanField(default=True)
    objects = models.GeoManager()

    def __unicode__(self):
            return self.Name

我还有另一个模型'Team',它有一个带有LandmarkGroup的ManyToMany,但我不打算在这里发布。我有一个视图,我查询所有具有地标组的地标,该地标组的团队ID与我传入的团队ID相同:

def mobile_startup(request):
...
    landmarkGroups = LandmarkGroup.objects.filter(team=device.team, IsActive=True)
    landmarks = Landmark.objects.filter(landmarkgroup__team=device.team, IsActive=True)
...
return render_to_response('webservice/mobile_startup.html', {'landmarks': landmarks, 'landmarkGroups': landmarkGroups})

一切正常,我遇到的唯一问题是,我将这一切都作为JSON返回到移动应用程序,我想为地标提供landmarkGroup id,所以在我的模板中我一直在尝试:

"landmarkGroup" : {{ landmark.landmarkgroup.id }} }

但那不起作用。有谁知道我可以获得我的集合中每个地标的landmarkGroup ID?我在查询时是否需要提取它?我知道我可以在查询中引用每个landmarkGroup,因为我可以做'landmarkgroup__team = device.team',但我需要能够在模板中引用这个对象

1 个答案:

答案 0 :(得分:0)

LandmarkGroup.landmarksManyToManyField,因此一个Landmark可以属于多个组。

您应该能够在模板中输出它们,如下所示:

{% for group in landmark.landmarkgroup_set.all %}{{ group.pk }}{% endfor %}

属于地标的第一个组应该可以通过{% landmark.landmarkgroup_set.all.0 %}

访问