Django 将字符串过滤为整数?

问题描述 投票:0回答:1

当我需要制作过滤器时遇到问题:

我需要 Django 将字符串字段与整数进行比较(几乎整个表都是整数)

这不起作用,因为仅返回包含 9 的条目,而不返回包含 12 或 13 的条目。

queryset = Cards.objects.extra(select={'stars': 'CAST(stars AS INTEGER)'}).filter(stars__gte= 9)

我也尝试过这个:

Cards.objects.annotate(stars_integer=Cast('stars', output_field=IntegerField())).filter(stars__gte= 9)

结果相同,但我无法将字段更改为整数,因为有些值是字符串,例如“?”和“X”

class Cards(models.Model):
    # CARD NAME
    name = models.CharField(
        max_length=128,
        null=False,
        unique=True,
    )
    # AMMOUNT OF STARS
    stars = models.CharField(
        max_length=2, null=True, unique=False, default="", verbose_name="Stars"
    )

谢谢

sql django orm django-queryset django-filter
1个回答
0
投票

你已经很接近了,但你忘了使用

stars_integer
:

Cards.objects.annotate(
    stars_integer=Cast('stars', output_field=IntegerField())
).filter(stars_integer__gte=9)

如果该项目不必出现在 .alias(…) 子句中,但仅应用于过滤,则您可能需要使用

SELECT [Django-doc]

Cards.objects.alias(
    stars_integer=Cast('stars', output_field=IntegerField())
).filter(stars_integer__gte=9)

话虽如此,如果字段包含整数数据,您最好首先使用

IntegerField
,也许还可以添加索引。这也将提高搜索时的效率。

© www.soinside.com 2019 - 2024. All rights reserved.