我在djangos 设计选择中遇到问题,不允许在模板中进行模型过滤。实际上,我确实理解它的意义,我真的不想打破它,但目前我看不出什么是最好或通常的方法来规避我的情况。
我有一个带有另一个模型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 %}
是的,为相同的信息查询数据库两次看起来很残忍,而 django 模板不接受这样的(正确)。
但是,其他方法似乎也不起作用:
- 我无法添加方法
Task.get_current_user_solution()
,因为在模型中我不知道哪个用户已登录 - 我无法添加方法
Task.get_user_solution(user)
,因为我无法通过模板传递参数 - 我不能在视图中查询信息并将其保存到字典
current_users_solutions
中(Task.id
作为索引),因为在模板中,我不能使用组合变量来访问字典(访问它的索引当然是task.id
)
那我还能做什么呢?从链接的文章中我只能看到我可以添加一个新的模板标签以允许从模板中查询,但如前所述,如果可能的话,我实际上想遵循 djangos 的设计原则。