所以我一直在使用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」,但我需要能夠在模板
是啊,我讀過,可訪問,但我想通因爲我可以做'Landmark.objects.filter(landmarkgroup__team = device.team,IsActive = True)'我應該能夠同時獲得該地標組或至少該id。 – Josh 2012-03-09 13:03:23
@Josh:你可以同時做到這一點,但是由於你的模型設置,仍然不止一個地標組可以屬於地標。如果你想避免你應該使用'ForeignKey'。 – 2012-03-09 13:50:39
不,我想要。我實際上曾經設置過其他方式(地標組和地標之間的一對多),但是我這樣做了,所以用戶在每次想將它添加到組中時都不必重新創建地標。你知道如何在同一時間選擇這個ID嗎?然後如何引用該ID?我找到的最佳答案是定義我自己的中間表並查詢該地址表,而不是地標表 – Josh 2012-03-09 14:05:35