基于整数Django-ORM的排序

基于整数Django-ORM的排序,django,postgresql,django-orm,Django,Postgresql,Django Orm,我使用这段代码进行排序,它在名称、url等情况下运行良好,但我想根据id(即整数字段)进行排序,我得到了这个错误 函数下限(整数)不存在 第1行:…ws\u sources\u newsource.“deleted”是按下排的空顺序(“new…” 我的代码是 class CaseInsensitiveOrderingFilter(OrderingFilter): def filter_queryset(self, request, queryset, view): or

我使用这段代码进行排序,它在名称、url等情况下运行良好,但我想根据id(即整数字段)进行排序,我得到了这个错误

函数下限(整数)不存在 第1行:…ws\u sources\u newsource.“deleted”是按下排的空顺序(“new…”

我的代码是

class CaseInsensitiveOrderingFilter(OrderingFilter):

    def filter_queryset(self, request, queryset, view):
        ordering = self.get_ordering(request, queryset, view)

        if ordering:
            new_ordering = []
            for field in ordering:
                if field.startswith('-'):
                    new_ordering.append(Lower(field[1:]).desc())
                else:
                    new_ordering.append(Lower(field).asc())
            return queryset.order_by(*new_ordering)

        return queryset
然后在列表视图中使用它

class IngredientListAPIView(ListAPIView):
       search_fields = ['name']
       queryset = models.NewsData.objects.all()
filter_backends =(filters.SearchFilter,CaseInsensitiveOrderingFilter,)
ordering_fields = ['id','name','url','language__name','count','key_journalists',]
ordering = ('name')

错误消息是明确的,您不能对整数使用函数lower()。Sqlite实际上没有类型,因此数据以字符串的形式返回。Postgres确实有类型,并且
字段将作为整数返回。您需要将
字段
显式转换为
str(字段)

更新 如果要按整数排序,请执行以下操作:

if ordering:
    return queryset.order_by(field)

现在请检查我有更新的问题,我有一个问题,我只想在django中使用基于整数字段的排序,如何使用?在升序或降序的情况下?您通常如何在django
order\u by()
order\u by(field)
中使用升序,
order\u by(-field)
用于降序。我使用几乎所有的字段进行排序,您能更新我的代码以便我可以为每个字段使用吗?不。第一,我不知道字段的类型。第二,不清楚如何进行筛选。第三,您已经有了如何按()排序的示例。您只需设置一个dict,将字段名称映射到排序/筛选规则,然后在浏览字段列表时应用这些规则。