Django 从子模型到父模型查询数据
Django query data from child to parent model
我正在创建一个应用程序,我想在我的模板中显示某个委员会的所有成员列表,而且我还想显示他们是否已支付该月费用的状态。现在我很困惑,因为我的会员 table 没有链接到付款细节。我可以从付款明细中获取付款人的名单 table 但我想要显示所有成员的名单,然后在他们旁边显示状态。
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,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)
你可以做反向关系,因为 django 会自动在另一边创建关系:
views.py:
def your_view(request):
members = Members.objects.all().select_related()
members_context = [member.paymentdetails_set.values("payment_month", "payment_status") for member in members]
return render(request, 'your_template', {'members': members_context})
your_template_tag.py:
from django.template.defaulttags import register
@register.filter
def get_item(dictionary, key):
return dictionary.get(key)
your_template.html:
{% for member in members %}
<p> Payment Month: {{ member|get_item:"payment_month" }}</p>
<p> Payment Status: {{ member|get_item:"payment_status" }}</p>
{% endfor %}
我正在创建一个应用程序,我想在我的模板中显示某个委员会的所有成员列表,而且我还想显示他们是否已支付该月费用的状态。现在我很困惑,因为我的会员 table 没有链接到付款细节。我可以从付款明细中获取付款人的名单 table 但我想要显示所有成员的名单,然后在他们旁边显示状态。
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,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)
你可以做反向关系,因为 django 会自动在另一边创建关系:
views.py:
def your_view(request):
members = Members.objects.all().select_related()
members_context = [member.paymentdetails_set.values("payment_month", "payment_status") for member in members]
return render(request, 'your_template', {'members': members_context})
your_template_tag.py:
from django.template.defaulttags import register
@register.filter
def get_item(dictionary, key):
return dictionary.get(key)
your_template.html:
{% for member in members %}
<p> Payment Month: {{ member|get_item:"payment_month" }}</p>
<p> Payment Status: {{ member|get_item:"payment_status" }}</p>
{% endfor %}