基于整数Django-ORM的排序
我使用这段代码进行排序,它在名称、url等情况下运行良好,但我想根据id(即整数字段)进行排序,我得到了这个错误 函数下限(整数)不存在 第1行:…ws\u sources\u newsource.“deleted”是按下排的空顺序(“new…” 我的代码是基于整数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
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中使用基于整数字段的排序,如何使用?在升序或降序的情况下?您通常如何在djangoorder\u by()
order\u by(field)
中使用升序,order\u by(-field)
用于降序。我使用几乎所有的字段进行排序,您能更新我的代码以便我可以为每个字段使用吗?不。第一,我不知道字段的类型。第二,不清楚如何进行筛选。第三,您已经有了如何按()排序的示例。您只需设置一个dict,将字段名称映射到排序/筛选规则,然后在浏览字段列表时应用这些规则。