1. 程式人生 > >django ORM操作

django ORM操作

pri HA col 參數 print lov int key 等價

models.py

多對多關聯
1
class Boy(models.Model): 2 name = models.CharField(max_length=12) 3 4 class Girl(models.Model): 5 nick = models.CharField(max_length=12) 6 7 class Love(models.Model): 8 b = models.ForeignKey(Boy) 9 g = models.ForeignKey(Girl)

views.py

 1 def edit(req):
2 objs
= [models.Love(g_id=2,b_id=1), 3 models.Love(g_id=3, b_id=1), 4 models.Love(g_id=2,b_id=2), 5 models.Love(g_id=4, b_id=3), 6 models.Love(g_id=1,b_id=3), 7 models.Love(g_id=2,b_id=4),] 8 models.Love.objects.bulk_create(objs,6) #整體循環寫入數據行
9 obj = models.Boy.objects.filter(love__id=2).first() #love(子表)關聯boy和girl(母表),作為參數正向是 小寫的 子表名__自己表的列名 反向 10 多對多的關聯 不適合用first query對象不只有一個
    print obj.name                           正向     model.Love.objects.filter(b__name=‘參數‘)  是雙下劃綫       11 obj = models.Love.objects.filter(g_id=2
)           12 for i in obj: 這樣需要多次鏈表操作耗費資源 等價於
obj = models.Love.objects.filter(g_id=‘2‘).values(‘b__name‘)
                                   for i in obj: 
13 print i.b.name                          print i[‘name‘]

等同於
obj = models.Love.objects.filter(g_id=‘2‘).values(‘b__name‘).select_related(‘g‘)
       for i in obj:                         需要添加參數,提前做好整個跨表如: obj.表名_set.all()       
        print i.b.name                        

django ORM操作