Django многие ко многим получают атрибуты от другого объекта - PullRequest
1 голос
/ 08 марта 2012

Так что я уже некоторое время использую 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', у которой есть ManyToMany с 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 для ориентира, поэтому в своем шаблоне я пытался :

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

но это не работает. Кто-нибудь знает, каким образом я могу получить идентификатор landmarkGroup для каждого ориентира в моем наборе? Нужно ли извлекать его, когда я делаю запрос? Я знаю, что могу ссылаться на каждую landmarkGroup в запросе, потому что я могу сделать 'landmarkgroup__team = device.team', но мне нужно иметь возможность ссылаться на этот объект в шаблоне

1 Ответ

0 голосов
/ 09 марта 2012

LandmarkGroup.landmarks - это ManyToManyField, поэтому один Landmark может принадлежать нескольким группам.

Вы должны быть в состоянии вывести их в свой шаблон следующим образом:

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

Первая группа, относящаяся к ориентиру, должна быть доступна через {% landmark.landmarkgroup_set.all.0 %}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...