如何验证Django模型是否具有通过GET参数指定的字段?
FieldError:无法将关键字“ item_typea”解析为字段。选择是: item_type,名称,ID ...
order_by = self.request.GET.get('order_by', None) # item_typea
Item.objects.all().order_by(order_by)
请注意,GET参数的值可以带有负号(用于排序),例如:
-item_type
或item_type
答案 0 :(得分:0)
您可以简单地捕获异常:
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
答案 1 :(得分:0)
您应该检查:
order_by = self.request.GET.get('order_by', None)
if order_by:
Item.objects.all().order_by(order_by)
答案 2 :(得分:0)
您可以使用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
表达式。