Могу ли я динамически устанавливать имена полей в запросе Django orm? - PullRequest
1 голос
/ 07 июля 2019

Можно ли динамически устанавливать имена полей в представлении 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 ]

1 голос
/ 07 июля 2019

Вместо того, чтобы делать это CategoryNick.objects.get(author=self.request.user).get(field=slug), вы можете сделать это CategoryNick.objects.get(author=self.request.user, field=slug)

1 голос
/ 07 июля 2019

Если вы хотите получить field объекта, вы можете использовать .values_list(..., flat=True) [Django-doc] здесь, например:

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

Итак, здесь вы получите значение slug для этого CategoryNick.Если вместо этого вы используете 'pk', вы получите первичный ключ.

Однако немного странно просто запрашивать заданное имя поля.

...