首页 > Django model ForeignKey 的反向查询优化

Django model ForeignKey 的反向查询优化

背景:

需求:

查询出 A表及B表中的字段信息。
例,A表数据

id name comm
1 test1 你好
2 test2 你不好

B表数据

id asset_id name
1 1 b数据1
2 1 b数据2

结果:

name comm b-name
test1 你好 b数据1
test1 你好 b数据2
test2 你不好

我的方案:

django model 模型:

class Adata(models.Model):
    name = models.CharField(u'姓名', max_length=10 )
    comm = models.TextField()
    
class Bdata(models.Model):
    asset = models.ForeignKey('Adata', db_index=True)
    name= models.CharField(u'姓名', max_length=10 )
    

逻辑:

datas = Adata.objects.select_related().all()
datalist = []
for data in datas:
    row = []
    row.append( data.name )
    row.append( data.comm )
    for test in data.bdata_set.all():
        subrow = row
        subrow.append( test.name)
        datalist.append( subrow )
        

A 表和 B 表在 3000左右条数据的时候,大约需要4秒左右的时间。求如何优化,求指点。
Thx


我换了个思路,从B表入手。通过双下划线关联A表的字段数据。这样既能得到想要的记录条数,又能得到A表的字段数据。

逻辑:

datas = Bdata.objects.select_related().all().values_list('asset__name','asset__comm','name')

总结:

有时候,遇到问题不要一成不变。换个入口思路,也行便会有意想不到的惊喜。

【热门文章】
【热门文章】