Reputation: 100
Say you've got these models:
class NetworkMember(models.Model):
network = models.ForeignKey(Network, related_name='members', on_delete=models.CASCADE, db_column='network_id_id')
user = models.ForeignKey(User, on_delete=models.CASCADE, db_column='user_id_id')
class Network(models.Model):
created_at = models.DateTimeField(auto_now_add=True, db_index=True)
And you have filtered NetworkMember
:
user_networks = NetworkMember.objects.filter(user=self.user)
Now user_networks
is QuerySet of NetworkMember
, how can I transform it to QuerySet of Network
?
Doing .values('network')
and .values_list('network')
doesn't change the type of QuerySet to Network
.
Upvotes: 1
Views: 320
Reputation: 476659
You can filter with:
Network.objects.filter(members__user=self.user)
One can use double underscores (__
) to look "through" relations. Since you specified the related_name='members'
, we access the relation in reverse.
If there are multiple NetworkMember
s with the same user to the same Network
, then that Network
will be returned that many times as there are such NetworkMember
's, you can use .distinct()
[Django-doc] to prevent that:
Network.objects.filter(members__user=self.user).distinct()
Upvotes: 1