【问题标题】:Dynamic queryset based on current user基于当前用户的动态查询集
【发布时间】:2017-12-22 16:15:30
【问题描述】:

我有两个模型:UserEdusQuestion

我需要获取具有特定UserEdus 作为其作者的所有Questions

模型.py

class UserEdus(models.Model):
user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True)

class Question(models.Model):
author = models.ForeignKey(UserEdus, null=False)

Views.py

class MyQuestionListView(generic.ListView):
    model = Question
    paginate_by = 10
    queryset = Question.objects.filter(author=User.useredus)
    template_name = 'edus/myquestion_list.html'

这个查询集返回int() argument must be a string, a bytes-like object or a number, not 'ReverseOneToOneDescriptor'

如果我这样做了

queryset = User.useredus.question.all()

返回'ReverseOneToOneDescriptor' object has no attribute 'question'

虽然在模板级别,我可以使用

得到正确的结果
{% for question in user.useredus.question_set.all %}

【问题讨论】:

  • 您确定不想使用 author=UserEdus 吗?鉴于 Question 模型,这就是 author 字段唯一可以做的事情:它对 UserEdus 有一个 FK。
  • 试试(author=request.user)而不是(author=User.useredus)
  • @Evert,这样做会返回相同的 int() 参数错误 hansTheFranz,返回请求未定义

标签: python django python-3.x django-views django-queryset


【解决方案1】:

因此,如果您想根据请求用户动态设置查询集,您将不得不重写 get_queryset 方法。所以做这样的事情:

class MyQuestionListView(generic.ListView):
    model = Question
    paginate_by = 10
    template_name = 'edus/myquestion_list.html'

    def get_queryset(self):
        return self.request.user.useredus.question_set.all()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2018-09-20
    • 2016-07-09
    相关资源
    最近更新 更多