Reputation: 139
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
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 belong
s 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