Django 数据模型进阶
2016-03-13 20:52
405 查看
访问外键(ForeignKey)值:
当你访问一个外键属性时,获取的是一个数据模型对象
book_set实际上是一个queryset,因此它可以进行filter操作。book_set属性是由模型名的小写形式加上_set组成
访问ManyToManyField
我们处理的是一个queryset而不是一个数据模型
Manager
模块manager是一个对象,Django通过它进行数据库查询。每个Django模块至少有一个manager,你可以自定义manager。增加manager额外的方法或者修改manager返回的初始的queryset
增加额外的方法
通过覆盖Manager的get_query_set()方法来修改初始的queryset
当有多个Manager时,Django默认使用第一个manager。
执行原始SQL查询
当你访问一个外键属性时,获取的是一个数据模型对象
<span style="font-size:18px;"><span style="font-size:18px;">models.py from django.db import models class Publisher(models.Model): name = models.CharField(max_length=50) website = models.CharField(max_length=60) def __unicode__(self): return self.name class Author(models.Model): name = models.CharField(max_length=50) email = models.EmailField() def __uniclde__(self): return self.name class Book(models.Model): title = models.CharField(max_length=50) publisher = models.ForeignKey(Publisher) author = models.ManyToManyField(Author) pub_date = models.DateTimeField() >>> from models import * >>>b = Book.objects.get(pk=3) >>>b.publisher >>>b.publisher.name </span></span>foreignkey关系也可以反推过来:
<span style="font-size:18px;"><span style="font-size:18px;">>>>p = Publisher.objects.get(pk=2) >>>p.book_set.filter(title__icontains= 'python') [<Book: python> <Book: python web>, <Book: python cookbook>]</span></span>
book_set实际上是一个queryset,因此它可以进行filter操作。book_set属性是由模型名的小写形式加上_set组成
访问ManyToManyField
我们处理的是一个queryset而不是一个数据模型
<span style="font-size:18px;"><span style="font-size:18px;">>>>b = Book.objects.get(pk=1) <Book: python> >>>b.author.all() [<Author:joe>, <Author:jam>, <Author:Sam>] >>>b.author.filter(name__icontains='am') [<Author:jam>, <Author:Sam>]</span></span>也可以通过book_set来查询一个作者的所有书籍
<span style="font-size:18px;"><span style="font-size:18px;">>>>a = Auhtor.objects.get(name='Sam') >>>a.book_set.all() </span></span>
Manager
模块manager是一个对象,Django通过它进行数据库查询。每个Django模块至少有一个manager,你可以自定义manager。增加manager额外的方法或者修改manager返回的初始的queryset
增加额外的方法
<span style="font-size:18px;"><span style="font-size:18px;">models.py from django.db import models class Publisher(models.Model): name = models.CharField(max_length=50) website = models.CharField(max_length=60) def __unicode__(self): return self.name class Author(models.Model): name = models.CharField(max_length=50) email = models.EmailField() def __uniclde__(self): return self.name class BookManager(models.Manager): def title_count(self, keyword): return self.filter(title=keyword).count() class Book(models.Model): title = models.CharField(max_length=50) publisher = models.ForeignKey(Publisher) author = models.ManyToManyField(Author) pub_date = models.DateTimeField() objects = BookManager()</span></span>修改初始manager queryset
通过覆盖Manager的get_query_set()方法来修改初始的queryset
<span style="font-size:18px;">class BookManager(models.Manager): def get_query_set(self): return super(BookManager, self).get_query_set().filter(title__icontains='python') <pre name="code" class="python"><span style="font-size:18px;">class Book(models.Model): title = models.CharField(max_length=50) publisher = models.ForeignKey(Publisher) author = models.ManyToManyField(Author) pub_date = models.DateTimeField() objects = models.Manager() classify_objects = BookManager() >>>Book.objects.all() #获取所有书籍 >>>Book.classify_objects.all() #获取所有title中包含python的书</span> </span>
当有多个Manager时,Django默认使用第一个manager。
执行原始SQL查询
from django.db import connection cursor = connection.cursor() cursor.execute('select * from app_book') cursor.fetchall()
相关文章推荐
- ZOJ 3492 Kagome Kagome
- POJ 2762 Going from u to v or from v to u? (强连通分量缩点+拓扑排序)
- 我与小娜(35):AlphaGo第四局为何输了?
- Go语言并发之美
- Machine Learning - Neural Networks for Multi-class Classification
- 除百度、Google外其他蜘蛛IP封锁脚本
- HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good
- 【大雾】关于mongoose的model的小问题
- 【大雾】mongoose中createConnection和connect的大坑!
- The 8th Zhejiang Provincial Collegiate Programming Contest-> Kagome Kagome
- 李世石首胜谷歌AlphaGo
- 李世石首胜谷歌AlphaGo
- uva11292 The Dragon of Loowater
- ubuntu14.04 and ros indigo install kinect driver--16
- Django 学习笔记二
- Golang websocket使用方法
- django中的分页
- Django 学习笔记一
- 一些重要的算法The Most Important Algorithms
- Django实战教程 分页列表