Как я могу проверить, имеет ли модель Django поле, заданное параметром GET? - PullRequest
0 голосов
/ 05 марта 2019

Как проверить, есть ли в модели Django поле, заданное с помощью параметра GET?

FieldError: Невозможно разрешить ключевое слово 'item_typea' в поле.Возможные варианты: item_type, name, id ...

order_by = self.request.GET.get('order_by', None) # item_typea
Item.objects.all().order_by(order_by)

Обратите внимание, что параметр GET может иметь значение со знаком минус (это для целей сортировки), например:

-item_type или item_type

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Вы должны просто проверить:

order_by = self.request.GET.get('order_by', None)
if order_by:
    Item.objects.all().order_by(order_by)
0 голосов
/ 05 марта 2019

Вы можете сделать это, используя get_field :

from django.core.exceptions import FieldDoesNotExist


order_by = self.request.GET.get('order_by', 'id')
try:
    if order_by.startswith('-'):
        Item._meta.get_field(order_by[1:])
    else:
       Item._meta.get_field(order_by)
except FieldDoesNotExist:
    # field does not exist

FYI, это решение не будет работать с foreignkey/m2m__field_name выражениями.

0 голосов
/ 05 марта 2019

Вы можете просто поймать исключение:

order_by = self.request.GET.get('order_by', None)  # item_typea
try:
    queryset = Item.objects.order_by(order_by)
    # evaluate the queryset - that's when the exception will be thrown
except FieldError:
    # deal with error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...