6

我在以下代码行中遇到语法错误。我已经导入了数学,但我的更新功能仍然无法工作。告诉我关键字不能是表达式并引用底部的 3 行。知道我做错了什么吗?

StoreLiquor.objects.filter(storeID=ID_Store, liquorID.BottleSize='750 ML', custom=False).update(StorePrice = liquorID.ShelfPrice)

StoreLiquor.objects.filter(storeID=ID_Store, liquorID.BottleSize='750 ML', custom=False).update(StorePrice = (float(liquorID.OffPremisePrice)) + (float(S750Increase)))

StoreLiquor.objects.filter(storeID=ID_Store, liquorID.BottleSize='750 ML', custom=False).update(StorePrice = (float(liquorID.OffPremisePrice) * (float(S750Increase)/100)) + float(liquorID.OffPremisePrice))
4

4 回答 4

8

您不能在参数名称中使用点,因此这部分会liquorID.BottleSize='750 ML'导致SyntaxError

filter在使用跨越关系的查找中使用相关模型

https://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships

Django 提供了一种强大而直观的方式来“跟踪”查找中的关系,在幕后自动为您处理 SQL JOIN。要跨越关系,只需跨模型使用相关字段的字段名称,用双下划线分隔,直到找到所需的字段。

所以你的陈述应该是这样的:

StoreLiquor.objects.filter(storeID=ID_Store, 
                           liquorID__BottleSize='750 ML',
                           custom=False).update(StorePrice=liquorID__ShelfPrice)
于 2013-11-05T07:56:02.350 回答
2

我认为应该是这样的

StoreLiquor.objects.filter(storeID=ID_Store, liquorID__BottleSize='750 ML', custom=False).update(StorePrice = liquorID__ShelfPrice)
于 2013-11-05T07:48:34.797 回答
1

不能用liquorID.BottleSize,无效。您只能使用有效的变量名。:

>>> def func():pass
>>> func(a.x=1)
  File "<ipython-input-22-c75a0f520ac0>", line 1
SyntaxError: keyword can't be an expression

改为使用liquorID__BottleSize

相关:为什么 django 在进行过滤查询时必须使用双下划线?

于 2013-11-05T07:49:01.857 回答
0

我认为这是因为您的命名参数的名称:您不能在其中使用点,因此 python 的liquorID.BottleSize命名参数有问题

于 2013-11-05T07:51:59.983 回答