У меня есть несколько простых модели, с отношением 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
Использование бывший получает меня объекты CommunityMembership; Я ищу способ получить объекты Сообщества, к которым относится объект CommunityMembership. С этим решением мне все равно придется проходить через CommunityMemberships, чтобы перейти к объекту Community. –
Какое из двух утверждений? Я все еще пытаюсь понять, в чем проблема, и что именно вы имеете в виду. – Todor
На самом деле, я думаю, вы правы. Моя путаница возникает из-за попытки обработать обратную ссылку «related_name» (которая дает мне примеры сквозной модели) и фактическое определение поля m2m на модели (что дает мне примеры связанной модели). На вопрос, который я задал, это правильный ответ. –