django - 在Django模板中循环时获取相关项目
问题描述
我试图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
为这些人显示相关联的 s。当我遍历这些注册时 - 我正在尝试查看是否有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。
解决方案
您错过了.all()
after的输入paymentdetail_set
,应该如下所示:
{% if registration.paymentdetail_set.all|length > 0 %}
PAID
{% else %}
NO PAYMENT
{% endif %}
推荐阅读
- hibernate - “In-Memory”H2 数据库使用什么样的自动增量?
- java - 洗牌类型数组中的元素
- nginx - Nginx 服务不工作:“SSL:错误:0906D0 - 期望:受信任的证书”
- javascript - Vue v-for 只展开点击的数据
- r - 比较两组数据的出现情况
- c# - 创建一个包含具有匿名类型的新表达式的 lambda 表达式
- javascript - React:如何在组件的生命周期中只调用一次方法,只要 data.loading 为 false
- python - 从网页获取脚本函数内部的信息
- python - 安装 matplotlib Python 时出错
- react-native - 如何在 React Navigation 中选择性地显示模式?