Как правильно составить запрос для ManyToMany в Django?

Сколько не читаю документацию, не получается нормально работать с ORM и ManyToMany. Пытаюсь запросить список групп, в которых находится юзер.

class User(AbstractUser):
    ...

class Group(models.Model):
    ...
    Member_list = models.ManyToManyField(User, through='Member', related_name="Member_list")

class Member(models.Model):
    group = models.ForeignKey(Group)
    user = models.ForeignKey(User)
    ...


пробовал:
user = request.user
groups = user.group_set.all() - выдает пустой список
member = user.member_set.all() - выдает одну связь
  • Вопрос задан
  • 8107 просмотров
Решения вопроса 1
@aeHarkonnen Автор вопроса
Ура! Нашелся вариант сделать это:

e = self.request.user
e.Member_list.all()
# output: [<Group: Group object>]


А можно даже еще проще:

self.request.user.Member_list.all()

Вот так вот :) Подозревал что related_name задается не просто так, но описание непонятное.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
Не совсем понимаю что у вас должно быть, но если юзер должен быть в группе то нужно так

class User(AbstractUser):
    groups = models.ManyToManyField(User, through='Group')


потом

user = request.user
groups = user.groups.all()
Ответ написан
@denizen
У вас избыточная модель получается: класс Member - совершенно лишний. many-to-many можно делать сразу для соотношения User<->Group. А sql-таблица, подобная вашему классу Member, будет сделана в Django ORM автоматически.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы