Django:对整数字段进行排序和过滤

3 投票
1 回答
3615 浏览
提问于 2025-04-16 20:17

我有以下内容:

#models.py

from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=30)
    result = models.IntegerField()

#views.py

 def MyView(request):
    foo = MyModel.objects.order_by('result')
    return render_to_response('foo.html', {'foo': foo})

我本来想得到这样的整数值排序:

1, 3, 5, 24, 45

但我得到的是:

1, 24, 3, 45, 5(这是按字符串排序的)

解决办法是:

#views.py

def MyView(request):
    foo = MyModel.objects.all()
    foo = foo.extra(select={'result': 'CAST(result AS INTEGER)'}).extra(order_by = ['result'])
    return render_to_response('foo.html', {'foo': foo})

我想要的效果是这样的(按整数过滤,而不是按字符串):

#views.py

def MyView(request):
    foo = MyModel.objects.all()
    foo = MyModel.objects.filter(result__gt = 50)

这样返回的结果比如是:6, 7, 9;而不会返回比如100, 200等。

这个应该怎么做呢?

1 个回答

0

我之前也遇到过这个问题,它发生在数据库字段被设置为字符(Char / Varchar)而不是整数(Int)的时候。

你需要进入数据库,把字段类型改一下,这样才能确保你可以正确地进行排序和筛选。

撰写回答