Django查询,大于和低于不工作

问题描述 投票:2回答:2

我有下表:

class OverallAdvise(mixins.OrdMixin, mixins.EqMixin, models.Model):
    section = models.ForeignKey('quest.Section',
                                on_delete=models.CASCADE,
                                related_name='section_owner')
    range_start = models.IntegerField(blank=True, null=True)
    range_end = models.IntegerField(blank=True, null=True)
    get_advise = models.CharField(max_length=500)

然后,在序列化器中,我试图根据计算得分选择get_advise

我的查询是:

get_overall_advise = OverallAdvise.objects.filter(section_id = section_id, range_start__gte = section_overall_score, range_end__lte = section_overall_score).values("get_advise")

但它不起作用。

当我在查询中仅使用section_id时,它正在工作。

给出了section_id=6section_overall_score=8

我需要像range_start<=6<=range_end这样的东西。

这是我的mysql表的一个例子:enter image description here

你能帮我吗?

python mysql django
2个回答
1
投票

在你的mysql示例中,我看到range_start永远不会大于range_end,因此range_start__gte=valuerange_end__lte=value将不匹配任何条目,因为值是相同的。除了range_start == range_end == value之外

所以如果你想要range_start <= 6 <= range_end你应该使用range_start__lte=6, range_end__gte=6


0
投票

在编写ORM查询时,就像语句一样,您将看到错误

for row in OverallAdvise.objects.all():
    if row.section_id == section_id:
        if range_start >= section_overall_score:
            if range_end <= section_overall_score:
                return row.get_advice

这将永远不会成功,因为range_start <= range_end。我想你想在你的查询中切换ltegte

get_overall_advise = OverallAdvise.objects.filter(section_id = section_id, range_start__lte = section_overall_score, range_end__gte = section_overall_score).values("get_advise")
© www.soinside.com 2019 - 2024. All rights reserved.