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 を自動的に処理します。関係を広げるには、必要なフィールドに到達するまで、モデル全体の関連フィールドのフィールド名を 2 つのアンダースコアで区切って使用します。

したがって、ステートメントは次のようになります。

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 はフィルター クエリを作成するときにアンダースコアを 2 つ使用する必要があるのですか?

于 2013-11-05T07:49:01.857 に答える
0

名前付き引数の名前が原因だと思います:それらにドットを使用できないため、python はliquorID.BottleSize名前付き引数に問題があります

于 2013-11-05T07:51:59.983 に答える