Полиморфизм - это способность обрабатывать класс объекта, как если бы он был родительским классом.
Например, предположим, что существует класс Animal и класс Dog, который наследуется от Animal. Полиморфизм - это способность рассматривать любой объект Dog как объект Animal так:
Dog* dog = new Dog;
Animal* animal = dog;
Вы должны просто проверить:
order_by = self.request.GET.get('order_by', None)
if order_by:
Item.objects.all().order_by(order_by)
Вы можете сделать это, используя 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
К вашему сведению, это решение не будет работать с foreignkey/m2m__field_name
выражениями.
Вы можете просто поймать исключение:
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