テンプレートでモデルのフィルタリングを許可しないというジャンゴの設計選択に問題があります。実際、私はその意味を理解しており、それを壊したくはありませんが、現在、私の状況を回避するための最善または通常の方法が何であるかがわかりません.
別のモデルへTask
の外部キーを持つモデルを持っています。現在、すべてのタスクを繰り返し処理しています。ユーザーがこのタスクのソリューションを既に持っている場合は、チェックマークとソリューションへのリンクの両方を表示したいと考えています。ややこのように:user_solutions
Solution
{% for task in tasks %}
{{ task.title }}
{% if task.user_solutions.filter(author=author).count() > 0 %}
Tick!
{{ task.user_solutions.get(author=author).get_absolute_url }}
{% endif %}
{% endfor %}
はい、データベースに同じ情報を 2 回照会するのは残酷に見えますが、django テンプレートはこのように (正しく) 受け入れません。
ただし、他のアプローチも機能しないようです。
Task.get_current_user_solution()
モデルではログインしているユーザーがわからないため、メソッドを追加できませんTask.get_user_solution(user)
テンプレートを介して引数を渡すことができないため、メソッドを追加できません- テンプレートでは、結合された変数を使用して辞書にアクセスすることはできません
current_users_solutions
(Task.id
そして、それにアクセスするためのインデックスはもちろんですtask.id
)
では、他に何ができるでしょうか?リンクされた記事から、テンプレートからのクエリを許可する新しいテンプレート タグを追加できることしかわかりませんが、前述のように、実際には可能であれば djangos の設計原則に従いたいと考えています。