2012-03-08 90 views
1

所以我一直在使用django一段時間,它很棒。我最近遇到了一些問題,並且我確信有一個糟糕的方法來實現它,但是我在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 

我也有與LandmarkGroup一個多對多另一種模式「團隊」,但我不打算將它張貼這裏。我在那裏我查詢所有有有有隊同一支球隊ID作爲一個我通過了landmarkgroup地標視圖:

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 }} } 

但不工作。有沒有人知道我可以得到我設置的每個地標的地標組ID?我在查詢時是否需要提取它?我知道我可以參考各landmarkGroup查詢,因爲我可以做「landmarkgroup__team = device.team」,但我需要能夠在模板

回答

0

LandmarkGroup.landmarksManyToManyField引用這個對象,因此一個Landmark可以屬於多個組。

你應該能夠輸出它們在你的模板是這樣的:

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

屬於劃時代的第一組應通過{% landmark.landmarkgroup_set.all.0 %}

+0

是啊,我讀過,可訪問,但我想通因爲我可以做'Landmark.objects.filter(landmarkgroup__team = device.team,IsActive = True)'我應該能夠同時獲得該地標組或至少該id。 – Josh 2012-03-09 13:03:23

+0

@Josh:你可以同時做到這一點,但是由於你的模型設置,仍然不止一個地標組可以屬於地標。如果你想避免你應該使用'ForeignKey'。 – 2012-03-09 13:50:39

+0

不,我想要。我實際上曾經設置過其他方式(地標組和地標之間的一對多),但是我這樣做了,所以用戶在每次想將它添加到組中時都不必重新創建地標。你知道如何在同一時間選擇這個ID嗎?然後如何引用該ID?我找到的最佳答案是定義我自己的中間表並查詢該地址表,而不是地標表 – Josh 2012-03-09 14:05:35