Django模板 - 检查用户是否已经为另一个对象创建了一个对象

时间:2017-11-25 05:06:04

标签: django

我有两个名为ValuationAssessment的模型。估值有很多评估(外键关系)。用户只能为每次评估创建1个评估。

这似乎很简单,但我无法绕过它。我需要检查估值的任何现有评估是否属于request.user,我该怎么做?

这不起作用,因为assessment_set.all是一个列表。 (在这种情况下,assessments是当前显示的估值的评估列表)

{% if request.user.assessment_set.all not in assessments %}
    # Display "make an assessment" form
{% endif %}

所以我认为我需要遍历request.user.assessment_set.all并查看每个用户的评估是否在assessments列表中,但我觉得这样效率非常低并且必须有更好的方法。建议?

1 个答案:

答案 0 :(得分:1)

根据您的描述,我假设您具有以下模型体系结构(我已使用related_name作为反向关系),

class Valuation(models.Model):
    # fields

class Assessment(models.Model):
    #fields
    user = models.ManyToManyField(User, related_name='assessments')
    valuation = models.ForeignKey(Valuation, related_name='assessments')

因此,如果您希望限制登录用户为每个评估仅创建1个评估,那么您只会提供未评估的评估。

views.py

unassessed_valuations = Valuation.objects.exclude(assessments__user=request.user)

模板

{% for valuation in unassessed_valuations %}
valuation assessment form
{% endfor %}