对不起,奇怪的标题,但我无法用几句话来解释情况。让我说清楚:
我有一个 Jobs 模型,我在模板中显示其对象。针对每项工作,我还想显示用户是否已经申请了该工作。
我有这些模型
class Job(models.Model):
is_valid = models.BooleanField()
description = models.CharField()
def has_user_applied(self, user):
return jobapplication_set.filter(applicant=user).exists()
class JobApplication(models.Model):
applicant = models.ForeignKey(User)
job = models.ForeignKey(Job)
cover_letter = models.CharField()
我在其中获取所有作业的视图:
jobs = Job.objects.filter(is_valid=True)
return HttpResponse( ... {'jobs': jobs} ... )
还有一个我列出它们的模板:
{% for j in jobs %}
{{ j.description }} {% if j.has_applied %} (You've already applied) {% endif %}
{% endfor %}
但是,“has_applied”函数将“user”作为参数,并且不允许在模板中传递参数。
现在我有两个问题:
我可以创建一个“上下文”,以便某些函数可以假设特定用户有问题,而不是显式传递并限制其在模板中的使用?如果不可能,那么在视图中的模型对象中注释此信息的优雅方法是什么?
其次,即使我能够做到这一点,对于每个 Job 对象,我仍然必须执行单独的查询来确定用户是否已经申请。我知道这在使用外部连接的原始 SQL 中是可能的,但是我可以使用 django 的 ORM 来做到这一点吗?