我想过滤通过过滤一次获得的查询集,但我不知道如何。
当前,我们正在从下面获取数据。 我想根据情况从表中单独获取数据 。 我就是不知道。
#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)
添加的模型。
#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)
对不起,英语不好,谢谢。
答案 0 :(得分:1)
您可以使用两个连续的下划线(__
)来查看关系:
context_data = super(members,self).get_context_data(**kwargs)
profile_queryset = profile.objects.filter(
user__user_profile__group__belong__user=self.request.user
)
# ...
因此,过滤器名称包含以下部分:
related belong belongs of group
_____^____ __^_
/ \ / \
user__user_profile__group__belong__user
\_ / \_ _/ \ _/
v v v
user of profile group of belong user of belong
您可以进行额外的检查,以检查belong
是否获得批准:
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
)
# ...