我有两个名为Valuation
和Assessment
的模型。估值有很多评估(外键关系)。用户只能为每次评估创建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
列表中,但我觉得这样效率非常低并且必须有更好的方法。建议?
答案 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 %}