Python 如何使用Q对象和&;操作人员

Python 如何使用Q对象和&;操作人员,python,django,django-queryset,Python,Django,Django Queryset,你能支持我提出以下问题吗 我有以下型号: class Tarifa(models.Model): limite_i = models.DecimalField(max_digits=10, decimal_places=2) limite_s = models.DecimalField(max_digits=10, decimal_places=2) class Calculator(models.Model): tarifa = models.ForeignKey(

你能支持我提出以下问题吗

我有以下型号:

class Tarifa(models.Model):
    limite_i = models.DecimalField(max_digits=10, decimal_places=2)
    limite_s = models.DecimalField(max_digits=10, decimal_places=2)


class Calculator(models.Model):
    tarifa = models.ForeignKey(Tarifa, on_delete=models.CASCADE)
    base = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
    limite = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
我有第一个查询集,它提供了我的计算器模型的一行信息:

qsl1 = Calculator.objects.values_list('base')
此查询集返回我在base中的所有金额:

<QuerySet [(Decimal('3000.00'),), (Decimal('5000.00'),), (Decimal('1000.00'),)]>

这是第二个查询值​​如果您使用以下内容更新您的
ForeignKey
字段,我的'limit\u s'>='base'和'limit\u i':

class Calculator(models.Model):
    tarifa = models.ForeignKey(Tarifa, on_delete=models.CASCADE, related_name='calculators')
    base = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
    limite = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
Tarifa.objects.filter(Q(limite_s__gte=F('calculators__base'))&Q(limite_i__lte=F('calculators__base')))
然后您可以这样尝试:

class Calculator(models.Model):
    tarifa = models.ForeignKey(Tarifa, on_delete=models.CASCADE, related_name='calculators')
    base = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
    limite = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
Tarifa.objects.filter(Q(limite_s__gte=F('calculators__base'))&Q(limite_i__lte=F('calculators__base')))

当您只需要一个字段时,我建议使用属性flat调用values\u list

bases = Calculator.objects.values_list('base', flat=True)
这将返回queryset的展开版本:

qsl2 = Tarifa.objects.filter(
Q(limite_s__gte=qsl1) 
& Q(limite_i_isr__lte=qsl1))
.values_list('limite_i')
<QuerySet [Decimal('3000.00'), Decimal('5000.00'), Decimal('1000.00')]>

谢谢你已经尝试过并返回一个空查询Set:谢谢,我将测试你的建议并告诉你发生了什么我得到了以下错误:回溯(最近一次调用):文件“”,第2行,在TypeError:append()中只取一个参数(给定2)-第2行是:Q(limite_s_gte=base),Q(limite_I_lte=base)),对不起,我想现在一切都好了,我忘了一个&非常感谢如果它成功了,现在我的问题已经是Queryset返回给我并返回值​​从最低到最高,如何检索值​​因此,它们将根据从基值计算的值在限制范围内保存在我的计算器模型中。嘿@AlfredoGodinez,欢迎使用so!这个答案对你有用吗?如果是,则单击复选标记将其作为答案接受。