如何验证Django模型是否具有通过GET参数指定的字段?

时间:2019-03-05 07:41:08

标签: django

如何验证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_typeitem_type

3 个答案:

答案 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表达式。