2010-03-20 2 views
0

У меня есть следующие модели в моем приложении Django. Как я могу с модели Team найти все объекты User, которые приняли True в модели Membership? Я знаю, что мне нужно использовать Team.objects.filter(), но я не уверен, как проверить значение поля accepted.Как я могу получить доступ к «сквозному» объекту Django ManyToManyField?

from django.contrib.auth.models import User 
class Team(models.Model): 
    members = models.ManyToManyField(User, through="Membership") 

class Membership(models.Model): 
    user = models.ForeignKey(User) 
    team = models.ForeignKey(Team) 
    accepted = models.BooleanField(default=False) 

ответ

1

Принимается члены команды:

team_42.members.filter(membership__accepted=True) 

Команда пользователь alice был принят:

alice.team_set.filter(membership__accepted=True) 

Я верю, что вы хотите получить набор команд или объекты пользователя, а не набор промежуточные объекты членства. Вы ответили на вопрос самостоятельно, но с ответом, который дает набор объектов Membership.

-1

Team.objects.filter(members__accepted__exact=True)

Посмотрите на this. В нем много замечательных примеров и объяснений.

+0

Это не работает. Я получаю FieldError: не удается разрешить ключевое слово «members_accepted» в поле. Возможные варианты: id, members, membership – Macha

+0

@Macha: Отредактирован мой ответ. –

+0

Все еще не работает. FieldError: Не удается разрешить ключевое слово «принято» в поле. Варианты: date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, членство, сообщение, пароль, команда, user_permissions, имя пользователя – Macha

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