Django中如何获取每个贷款申请关联的最新paymentdate
如何获取每个贷款申请对应的最新还款日期
模型代码(models.py)
class loan(models.Model): completed=models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True,null=True) application_id=models.CharField(max_length=100,unique=True) class topay(models.Model): loanapplication=models.ForeignKey(loan,on_delete=models.CASCADE,null=True) paymentdate=models.DateField(null=True, blank=True)
需求
要拿到每一个贷款申请对应的最新paymentdate。
当前使用的查询代码(views.py)
topay.objects.filter().values().annotate(last=Max('paymentdate'))
当前代码的问题
这段代码没有按贷款申请分组,最终只会算出所有topay记录里的最大还款日期,无法得到每个贷款申请各自对应的最新日期。
正确的查询写法
必须按关联的贷款申请进行分组,才能为每个贷款申请单独计算最新还款日期:
写法1:直接从topay表分组查询
适合只需要贷款申请ID和对应最新日期的场景:
from django.db.models import Max topay.objects.values('loanapplication').annotate(last_payment_date=Max('paymentdate'))
写法2:关联贷款表查询(获取更多贷款信息)
如果还需要贷款的其他字段(比如application_id、完成状态completed),可以先给外键添加反向关联名,修改模型如下:
class topay(models.Model): # 新增related_name用于反向关联 loanapplication=models.ForeignKey(loan,on_delete=models.CASCADE,null=True, related_name='payments') paymentdate=models.DateField(null=True, blank=True)
然后通过贷款模型查询,同时获取贷款完整信息和对应最新还款日期:
from django.db.models import Max loan.objects.annotate(last_payment_date=Max('payments__paymentdate'))
内容的提问来源于stack exchange,提问作者Jainivash
相关产品推荐
相关产品推荐

