akhilsp
akhilsp

Reputation: 1103

Query in a recursive Many to Many relationship with a Through table, Django

My models.py is:

User(models.Model):
  people = models.ManyToManyField('self', through='Friend', symmetrical=False)

Friend(models.Model):
  from_user = models.ForeignKey('User', related_name='friends')
  to_user = models.ForeignKey('User', related_name='friends_of')
  accepted = models.BooleanField(default=False)

To get a queryset of User instance of all Friend objects related to user_instance, I'm currently doing something like:

user_instance.people.all() | user_instance.user_set.all()

This works, but what I want is that of accepted = True only. Something like:

user_instance.people.filter(people__accepted=True) | user_instance.user_set.filter(people__accepted=True)

Note: Renamed friendship to people

Thanks

Upvotes: 1

Views: 305

Answers (1)

Sajin
Sajin

Reputation: 1638

Try this:

user_instance.people.filter(friends_of__accepted=True) | user_instance.user_set.filter(friends__accepted=True)

The point is, related_name should be prepended to __accepted instead of the field name people.

Upvotes: 1

Related Questions