Получить связанные элементы во время цикла в шаблоне Django - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь получить доступ к связанному объекту (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.

1 Ответ

0 голосов
/ 11 января 2019

Вы пропустили ввод .all() после paymentdetail_set, должно выглядеть так:

{% if registration.paymentdetail_set.all|length > 0 %}
   PAID
{% else %}
   NO PAYMENT
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...