我在以下代码行中遇到语法错误。我已导入数学,但我的更新功能仍无效。告诉我关键字不能是一个表达,并列举底部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))
答案 0 :(得分:4)
您不能在参数名称中使用点,因此此部分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)
答案 1 :(得分:2)
我认为它应该是这样的
StoreLiquor.objects.filter(storeID=ID_Store, liquorID__BottleSize='750 ML', custom=False).update(StorePrice = liquorID__ShelfPrice)
答案 2 :(得分: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
。
相关:Why django has to use double underscore when making filter queries?
答案 3 :(得分:0)
我认为这是因为您的命名参数的名称:您不能在其中使用点,因此python与您的liquorID.BottleSize
命名参数存在问题