Django:'bool'对象在尝试从queryset获取值时不可下标

jvlzgdj9  于 2023-04-22  发布在  Go
关注(0)|答案(1)|浏览(167)

我试图从一个queryset中获取一个值,但我一直得到这个错误,说'bool' object is not subscriptable
我有一个类似于tax_rate_fee = TaxRate.objects.filter(country=cartorder.country).exists()的查询集,我正在检查查询集中是否存在特定的国家,然后我想从查询集中获取一个值并执行一些操作。
这是我的代码

tax_rate_fee = TaxRate.objects.filter(country=cartorder.country).exists()
if tax_rate_fee:
    cartorderitem.vat = 5 * tax_rate_fee['rate']

这是税率费用模型

class TaxRate(models.Model):
    country = models.CharField(max_length=200)
    rate = models.IntegerField(default=5, help_text="Numbers added here are in percentage (5 = 5%)")
    active = models.BooleanField(default=True)
pxy2qtax

pxy2qtax1#

你得到错误'bool' object is not subscriptable的原因是queryset上的exists()方法返回一个布尔值,指示queryset中是否有任何记录匹配指定的条件。
要从查询集中检索实际记录,需要使用filter()get()方法,而不是exists()。此外,检索记录后,需要访问每条记录的rate属性,而不是exists()返回的布尔值。下面是如何修改代码的示例:

tax_rate_fee = TaxRate.objects.filter(country=cartorder.country)
if tax_rate_fee.exists():
    cartorderitem.vat = 5 * tax_rate_fee.first().rate

在这段代码中,我们首先过滤TaxRate查询集,以检索与指定country匹配的所有记录。然后我们检查是否有任何使用exists()的记录。如果有,我们使用first()检索第一条记录(假设只有一条匹配记录),并访问其rate属性来执行计算。
请注意,如果有多个匹配的记录,您可能需要使用不同的方法来检索相应的记录,例如get()values()

相关问题