Как получить атрибут из другой модели в шаблоне django

SO У меня есть две модели, одна - Members, другая - PaymentDetail. Мне нужны все члены из модели Member в моем шаблоне, которые я могу получить из Members.object.all(), но я также хочу, чтобы платежный_статус всех этих членов был в моем шаблоне рядом с ними. Я не знаю, как это сделать, так как payment_status отсутствует в модели Member.

class Members(models.Model ):
    user = models.ForeignKey(Users,verbose_name='User Id', on_delete=models.CASCADE)
    com = models.ForeignKey(Committees, on_delete=models.CASCADE,verbose_name='Committee Name')
    mem_status = models.CharField( max_length=20,choices=MEMBER_STATUS, verbose_name='Member Status')
    mem_note = models.TextField(null=True, blank=True)

class PaymentDetails(models.Model):
    mem = models.ForeignKey(Members,on_delete=models.CASCADE, related_name="payment_details",verbose_name='Memeber Phone no')
    com = models.ForeignKey(Committees, on_delete=models.CASCADE,verbose_name='Committee Name')
    payment_month = models.DateField(default=datetime.now())
    payment_amount_debit = models.IntegerField(null=True,blank=True)
    payment_amount_credit = models.IntegerField(null=True,blank=True)
    payment_status = models.CharField(max_length=16, choices=PAYMENT_DETAILS_CHOICES, default="1")
    payment_proof = models.ImageField(upload_to='images/')
    payment_note = models.TextField(null=True,blank=True)

Я много искал и нашел, что есть что-то, называемое related name и setname, но я вроде как новичок, поэтому я не получаю желаемых результатов, используя их тоже.

Просто используйте payment_details для каждого экземпляра Members следующим образом:

members = Members.object.all()
for member in members:
    print(f"Member {member.id} has payment status of " +
          f"{member.payment_details.payment_status}")

member.payment_details дает вам экземпляр PaymentDetail, а member.payment_details.payment_status является payment_status полем PaymentDetail экземпляра

Кстати, лучше использовать сингулярную форму в именах моделей.

Вы можете получить доступ к объекту платежных реквизитов через связанное имя. Я вижу, что вы определили payment_details, поэтому в HTML шаблоне вы можете получить доступ к нему следующим образом:

member.payment_details.all()

Могут возникнуть проблемы с производительностью, поскольку payment_details.all() будет выполняться запрос к базе данных. Вы можете избежать этого, используя prefetch_related('payment_details') в представлении django. Пример:

Member.objects.prefetch_related('payment_details')

Вернуться на верх