我可以在Django orm查询中动态设置字段名称吗?

时间:2019-07-07 10:29:44

标签: django django-views

我可以在Django视图中动态设置字段名称吗?

我想要这个代码

CategoryNick.objects.get(author=self.request.user).get(field=slug)

但发生错误

AttributeError: 'CategoryNick' object has no attribute 'get'

有解决这个问题的好方法吗?

如果您知道解决方案,谢谢您让我知道

总代码

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super(type(self), self).get_context_data(**kwargs)
        context['posts_without_category'] = MyShortCut.objects.filter(category=None,author=self.request.user).count()
        context['category_list'] = Category.objects.all()

        slug = self.kwargs['slug']
        if slug == '_none':
            context['category'] = 'no_category'
        else:
            category = Category.objects.get(slug=slug)
            context['category'] = category
            context['category_nick'] = CategoryNick.objects.get(author=self.request.user).get(field=slug)

        return context

2 个答案:

答案 0 :(得分:1)

如果要检索对象的field,则可以在此处使用.values_list(..., flat=True) [Django-doc],例如:

CategoryNick.objects.values_list('slug', flat=True).get(author=self.request.user)

因此,您将在此处检索该slug的{​​{1}}值。如果改用CategoryNick,则将获得主键。

但是仅查询给定的字段名有点“奇怪”。

答案 1 :(得分:1)

您不必像这样CategoryNick.objects.get(author=self.request.user).get(field=slug)那样做CategoryNick.objects.get(author=self.request.user, field=slug)