gpt4 book ai didi

django order_by FieldError 异常无法捕获

转载 作者:行者123 更新时间:2023-12-01 11:56:05 26 4
gpt4 key购买 nike

from django.core.exceptions import FieldError

#This is a method of a class
def _order_item_list(self, item_list, order_items_by, previous_order_by):
if order_items_by == previous_order_by:
order_items_by = '-' + order_items_by

try:
result = item_list.order_by(order_items_by)
except FieldError:
result = item_list

return result, order_items_by

现在,当我在生成的链接后按有效字段订购时,一切正常。当我编辑一个链接并添加一些用于排序的虚拟字段名时,它应该被这个异常捕获并且应该返回原始列表。但它没有发生,相反我总是从 django 得到一个 FieldError。

FieldError 在 ...

无法将关键字 u'fgsdffds' 解析为字段。选择是:...

最佳答案

未捕获异常的原因是 QuerySet 尚未计算。

要验证用于模型字段或 order_by 值的任意(用户指定)值,只需检查该模型是否具有该名称的字段。

例如,假设您有一个名为 Ticket 的模型和一个名为 field_name 的任意 GET 参数。以下是在 views.py 中创建有效的 QuerySet 的方法:

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 ...

关于django order_by FieldError 异常无法捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com