2016-08-03 2 views
0

У меня есть несколько простых модели, с отношением M2M через модель (дополнительные данные о взаимосвязи удалена для ясности):Идиоматический способа получить список связанной модели

class Team(models.Model): 
    name = models.CharField(max_length=200) 
    communities = models.ManyToManyField(Community, through='CommunityMembership') 

class Community(models.Model): 
    name = models.CharField(max_length=200) 
    description = models.TextField() 

class CommunityMembership(models.Model): 
    team = models.ForeignKey(Team) 
    community = models.ForeignKey(Community) 

Если я хочу, чтобы получить все общин, связанных с командой, я знаю, что могу получить первые идентификаторы сообществ через поле М2М и затем использовать этот список для фильтрации Communities:

communities = Community.objects.filter(id__in=team.communities.all().values_list('community_id', flat=True) 

Это чувствует себя излишне громоздким, и я хотел бы узнайте, есть ли более идиоматический способ получить только сообщества для команды в один оператор без первого запроса идентификаторов

(псевдокод)

communities = team.communities.all().values_list('community') # this returns ths ids of the communities, not the whole Community model 

ответ

1

Если я хочу, чтобы получить все из общин, связанных с командой

#you just need to use the M2M field 
communities = team.communities.all() 

#If you want CommunityMemberships instead 
community_memberships = team.communitymembership_set.all() 
+0

Использование бывший получает меня объекты CommunityMembership; Я ищу способ получить объекты Сообщества, к которым относится объект CommunityMembership. С этим решением мне все равно придется проходить через CommunityMemberships, чтобы перейти к объекту Community. –

+0

Какое из двух утверждений? Я все еще пытаюсь понять, в чем проблема, и что именно вы имеете в виду. – Todor

+0

На самом деле, я думаю, вы правы. Моя путаница возникает из-за попытки обработать обратную ссылку «related_name» (которая дает мне примеры сквозной модели) и фактическое определение поля m2m на модели (что дает мне примеры связанной модели). На вопрос, который я задал, это правильный ответ. –

Смежные вопросы