码迷,mamicode.com
首页 > 其他好文 > 详细

django ORM操作

时间:2018-03-31 21:27:16      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:一个   sel   lte   query   filter   mic   链表   post   表名   

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操作

标签:一个   sel   lte   query   filter   mic   链表   post   表名   

原文地址:https://www.cnblogs.com/qlshao/p/8516525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!