我试图在循环访问PaymentDetail
对象列表(_set
)时访问相关对象(如果存在,则为Registrations
)。
我的模型如下:
模型
class Registration(models.Model):
person = models.ForeignKey(Person, on_delete=models.PROTECT)
course_detail = models.ForeignKey(
CourseDetail,
on_delete=models.PROTECT
)
comments = models.CharField(max_length=200, blank=True, null=True)
def __str__(self):
return '%s' % (self.course_detail.course.name)
class PaymentDetail(models.Model):
payment = models.ForeignKey(Payment, on_delete=models.PROTECT)
registration = models.ForeignKey(
Registration,
on_delete=models.PROTECT)
在我看来,我只是获得所需人员的查询集,并将其传递到模板(这些显示很好)。
视图
def index(request, **kwargs):
people = Person.get_related_people(request.user.id).order_by('first_name')
return render(request, 'people_app/index.html', {
'people': people,
})
当我在模板中遍历它们时,我正在为这些人显示关联的Registration
。当我遍历这些注册时-我试图查看是否有与该PaymentDetail
关联的Registration
在我的模板中,我像这样遍历registration_list
:
模板
{% for person in people %}
{% for registration in person.registration_set.all %}
{{ registration.id }}
{% if registration.paymentdetail_set|length > 0 %}
PAID
{% else %}
NO PAYMENT
{% endif %}
{% endfor %}
{% endfor %}
您可能会想像-这不起作用,即使存在PaymentDetail
,也始终显示为NO PAYMENT。
答案 0 :(得分:1)
您错过了在.all()
之后键入paymentdetail_set
的情况,看起来应该像这样:
{% if registration.paymentdetail_set.all|length > 0 %}
PAID
{% else %}
NO PAYMENT
{% endif %}