django
django

Reputation: 139

How to filter a query set

I'd like to filter the queryset obtained by filtering once, but I don't know how.

Currently, we are getting data from below. And I want to get the data from the table separately on the condition . I just don't know how.

#view
context_data = super(members,self).get_context_data(**kwargs)
group = belong.objects.get(user=self.request.user).group
belong_queryset = belong.objects.filter(group=group)
#I want to apply belong_queryset to profile filter.
#profile_queryset = profile.objects.filter(belong_queryset)  

Added model.

#model
class profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,)
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=150, blank=True)



class belong(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='user_profile')
    group = models.ForeignKey(group, on_delete=models.CASCADE)
    approval = models.IntegerField(default=0)

Sorry for the poor English and explanation.

Upvotes: 1

Views: 36

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477641

You can use two consecutive underscores (__) to look through a relation:

context_data = super(members,self).get_context_data(**kwargs)
profile_queryset = profile.objects.filter(
    user__user_profile__group__belong__user=self.request.user
)
# ...

The filter name thus has the following parts:

       related belong   belongs of group
       _____^____           __^_
      /          \         /    \  
user__user_profile__group__belong__user
\_ /                \_ _/          \ _/
  v                   v             v
user of profile   group of belong  user of belong

You can make extra checks to check if the belongs are approved:

context_data = super(members,self).get_context_data(**kwargs)
profile_queryset = profile.objects.filter(
    user__user_profile__group__belong__user=self.request.user,
    user__user_profile__approval=1,
    user__user_profile__group__belong__approval=1
)
# ...

Upvotes: 1

Related Questions