如何在Django中过滤CharField作为Int的查询集?



我有一个模型作为CharField,但所有值都是int。

salary_amount_min = models.CharField(max_length=10, default='', null=True)
salary_amount_max = models.CharField(max_length=10, default='', null=True)

如何做一个过滤器,以获得小于等于和大于等于在这些领域?

我的当前过滤器:

search_salary_min = hr_form.cleaned_data['search_salary_min ']
search_salary_max = hr_form.cleaned_data['search_salary_max ']
salaryMinQS = Q(salary_amount_min__gte=search_salary_min )
salaryMaxQS = Q(salary_amount_max__lte=search_salary_max )

如果我在终端显示QS:

MIN (: (' salary_amount_min__gte ', ' 2100000 '))马克斯(:(' salary_amount_max__lte ', ' 2600000 '))

您可以使用DB函数Cast使用注释将值转换为另一种数据类型,然后对该注释进行过滤

from django.db.models import IntegerField
from django.db.models.functions import Cast
MyModel.objects.annotate(
salary_amount_min_int=Cast('salary_amount_min', output_field=IntegerField()),
salary_amount_max_int=Cast('salary_amount_max', output_field=IntegerField())
).filter(
salary_amount_min_int__gte=search_salary_min,
salary_amount_max_int__lte=search_salary_max
)

你可以使用自定义管理器,这是非常低效的

from django.db import models
class MyManager(models.Manager):

def salary_gte(self, max):
items = []
for obj in self.all():
if int(obj.search_salary_max) < max:
items.append(obj)
return items

最新更新