私は幾分複雑なモデルを持っていますので、私は現在の状態と必要を簡略化する例を与えるために全力を尽くします。Django Instanceの他のフィールドに 'when'を使用してmany-2-manyフィールドの単一インスタンスを注釈します
qs = MyModel.objects.all()
このクエリセット内の各インスタンス、別のモデルには多くの-2-多くのフィールドを持っている、のは「First_M2M」と呼んでみましょう:
私はクエリセットを持っています。 First_M2Mが別のモデルへの外部キーを有し、(それぞれFkModelとSecond_M2M)さらに別のモデルに多く-2-多く:
qs[0].first_m2m.fk_model.name # This is a string.
qs[0].first_m2m.second_m2m.all() # This is a many2many manager.
Second_M2Mは別の多く-2-多くの関係を有する、Third_M2M:
qs[0].first_m2m.second_m2m[0].third_m2m.all() # Also a m2m manager.
これは私がやろうとしていることです:second_m2mインスタンスのいずれかの値に基づいてqを注文したいと思います。しかし、どのインスタンスを選択する必要があります。これは、first_m2mインスタンスを決定するためにfk_modelのフィールドを照会し、third_m2m内のインスタンスの1つのフィールドを照会することによって行われます(これによってsecond_m2mが決定されます)。
これをさらに興味深くするために、注文する値はYAMLです。
は、ここで私が何しようとしたものです:
qs.annotate(val_to_filter_by=Case(
When(
first_m2m__fk_model__name='foo',
first_m2m__second_m2m__third_m2m__some_field='bar'),
then='first_m2m__second_m2m__value_field',
default=Value(None),
output_field=YAMLField()
)
).order_by(val_to_filter)
私は私が間違って得たものを信じているが、Djangoはそれが取るべきどのインスタンスかを決定するための十分なコヒーレントではありません、クエリです。しかし、私は私の問題を見つけることができません。
ご協力いただければ幸いです。