基于整数 Django ORM 的排序
Ordering On basis of Integer Django ORM
我正在使用此代码进行订购,它在 Name、url 等情况下工作正常但我想根据 id(它是整数字段)进行订购,但我收到此错误
函数 lower(integer) 不存在
第 1 行:...ws_sources_newssource"."deleted" IS NULL ORDER BY LOWER("new...
而且我的代码和fellow一样
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
然后在ListView中使用它
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 确实有类型并且 field
以整数形式返回。您需要明确地将 field
转换为 str(field)
更新
如果您想按整数排序,则类似于:
if ordering:
return queryset.order_by(field)
我正在使用此代码进行订购,它在 Name、url 等情况下工作正常但我想根据 id(它是整数字段)进行订购,但我收到此错误
函数 lower(integer) 不存在 第 1 行:...ws_sources_newssource"."deleted" IS NULL ORDER BY LOWER("new...
而且我的代码和fellow一样
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
然后在ListView中使用它
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 确实有类型并且 field
以整数形式返回。您需要明确地将 field
转换为 str(field)
更新 如果您想按整数排序,则类似于:
if ordering:
return queryset.order_by(field)