【问题标题】:Get related items while looping in Django template在Django模板中循环时获取相关项目
【发布时间】:2019-06-06 15:59:42
【问题描述】:

我正在尝试访问一个相关的对象(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,
    })

当我在模板中循环浏览它们时 - 我正在为这些人显示关联的 Registrations。当我遍历这些注册时 - 我正在尝试查看是否有与 Registration 关联的 PaymentDetail

在我的模板中,我像这样循环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。

【问题讨论】:

    标签: django python-3.x django-models django-templates


    【解决方案1】:

    您错过了在paymentdetail_set 之后输入.all(),应该如下所示:

    {% if registration.paymentdetail_set.all|length > 0 %}
       PAID
    {% else %}
       NO PAYMENT
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 2011-09-26
      • 1970-01-01
      相关资源
      最近更新 更多