Django: order_by и фильтр по целочисленным полям - PullRequest
3 голосов
/ 26 июня 2011

У меня есть это:

# 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 голосов
/ 14 декабря 2011

У меня была эта проблема до того, как она возникла, когда в поле базы данных было установлено значение Char / Varchar вместо Int.

Вам нужно будет зайти в базу данных и изменить тип поля, чтобы убедиться, что вы можете отсортировать ифильтровать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...