Причина, по которой исключение не перехвачено, состоит в том, что QuerySet
еще не был оценен.
Чтобы проверить произвольное (указанное пользователем) значение, используемое для поля модели, или значение order_by
, простопроверьте, есть ли в этой модели поле с таким именем.
Например, скажем, у вас есть модель с именем Ticket
и произвольный параметр GET с именем field_name
.Вот как вы можете справиться с созданием действительного QuerySet
в views.py
:
from django.db.models import FieldDoesNotExist
from myapp.models import Ticket
def index(request):
default_field = 'id'
field_name = request.GET.get('field_name', default_field)
try:
Ticket._meta.get_field_by_name(field_name)
except FieldDoesNotExist:
field_name = default_field
tickets = Ticket.objects.all().order_by(field_name)
return ...