Django模型1對多的查詢用法

# models.py
# 基金庫:基金代碼,基金名稱
class Fund(models.Model):
    code = models.CharField(max_length=20, unique=True, primary_key=True)
    name = models.CharField(max_length=250, blank=True, default='')

# 基金净值庫:基金代碼,净值日期,净值,增長率,備注
class FundData(models.Model):
    fund = models.ForeignKey(Fund, on_delete=models.CASCADE)
    net_worth_date = models.DateField()
    net_worth = models.DecimalField(max_digits=12, decimal_places=4)
    growth_rate = models.DecimalField(max_digits=10, decimal_places=4)
    remark = models.TextField(blank=True)

假設,添加了基金代碼為100001的基金,並添加該基金的净值歷史數據,一些查詢的方法如下:

f = Fund.objects.filter(code='100001')
    
# 獲取所有的基金净值數據
f.funddata_set.all()

# 獲取指定日期的基金數據
fd = f.funddata_set.filter(net_worth_date='2022-05-01')
# or
# FundData.objects.filter(fund=f, net_worth_date="2022-05-01") 
# FundData.objects.filter(fund_id=f.code, net_worth_date="2022-05-01") 
# 判斷上述的查詢的結果:True返回List,False則沒有找到
fd.exists()

# 獲取數據庫内最新日期的基金净值數據
f.funddata_set.all().order_by('-net_worth_date').first()
# or
# FundData.objects.filter(fund=f1).order_by('-net_worth_date').first()

# 獲取最近7天的基金數據
f.funddata_set.all().order_by('-net_worth_date')[:7]
# or
# FundData.objects.filter(fund=f1).order_by('-net_worth_date').first()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值