【问题标题】:Get objects in query based on user根据用户获取查询中的对象
【发布时间】:2013-11-12 14:42:34
【问题描述】:

我有一个个人资料页面,其中列出了与用户相关的所有利益,以及与用户无关的所有利益。

我的问题是,它没有过滤用户,所以每个登录的人都会看起来有他们没有的好处。

我的模特:

class PublishedManager(models.Manager):
    use_for_related_fields = True
    def get_queryset(self):
        return super(PublishedManager, self).get_queryset().filter(is_published=True)

class Benefit(models.Model):
    name = models.CharField(max_length=200)
    is_published = models.BooleanField(default=False)

    objects = models.Manager()
    published = PublishedManager()

class Profile(models.Model):
    user = models.OneToOneField(User)
    benefits = models.ManyToManyField(Benefit, blank=True, null=True, related_name="used_benefit")

我的看法:

class ProfileFrontpage(TemplateView):
    template_name = "profile/dashboard.html"

    def get_context_data(self, **kwargs):
            context = super(ProfileFrontpage, self).get_context_data(**kwargs)


            context['used_benefit_list'] = Benefit.published.filter(used_benefit__isnull=False)

            context['unused_benefits_list'] = Benefit.published.filter(used_benefit__isnull=True)


            return context

如何过滤与个人资料/用户相关的福利?

【问题讨论】:

    标签: django django-views django-queryset


    【解决方案1】:

    您只需要添加相应的过滤条件(此示例显示登录用户的过滤器)

    user = self.request.user
    
    benefits = Benefit.published.all()
    used_benefit_list = benefits.filter(used_benefit__isnull=False, used_benefit__user = user)
    unused_benefits_list = benefits.exclude(id__in = used_benefit_list)
    
    context = {'used_benefit_list': used_benefit_list, 'unused_benefits_list': unused_benefits_list}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      相关资源
      最近更新 更多