私はこの素晴らしいテクニックを使って、ビュー内のコードが単純で外部キー依存性を含まないようにORY関係をクエリーセットにカプセル化しています。prefetch_relatedでクエリーセットマネージャーを使用する
ビュー:
vendors_qs = vendors_qs.select_related().prefetch_related('agreement_vendors')
モデル クラスAgreementVendorsQuerySet(models.query.QuerySet):
def some_filter1(self, option):
result = self.filter(.....)
return result
def some_filter2(self, option):
result = self.filter(.....)
return result
テンプレート:
しかし、この時間は、私は最高のコードでdescriped次の問題に直面しています{% for vendor in vendors_qs %}
<tr>
...
<td>
{% for vend_agr in vendor.agreement_vendors.all %}
{{vend_agr.serial_number}}
{% endfor %}
<td>
</tr>
{% endfor %}
質問は、どのようにしてどこに適用するのですか。ベンダー契約には、prefetch_related
の関係としてフェッチされているので、を入力してください。何らかの形で、またはビュー自体にフィルタを適用する必要がありますか? 私は明らかに十分な質問を入れていない場合、私はさらに明確にするためにあなたの質問を聞いてきます...
UPDATE: アンナのasnwerは非常に多くの真実のように見えますが、1つの詳細は不明なままです。 if-conditionに基づいていくつかのフィルタを適用したい場合あなたを私ははっきりとあなたの質問を理解していれば、あなたがこの
vendors_qs = vendors_qs.prefetch_related(models.Prefetch('agreement_vendors', queryset=some_filter, to_attr='agreement_vendors_list'))
ようなものが必要
のように呼び出すことができます。すべてのフィルタを適用することができます。フィルタリングを済ませたらプリフェッチ –
Sardorbekを適用できます。コードスニペットを入力してください。 –