Django 1.5.4 专题28 键操作
2013-10-24 13:58
531 查看
一、一对多(外键)ForeignKey
related_name=string,最好指定,如果有多个键值要指定外键,避免冲突例子:一个作者对应多本书,一本书只有一个作者
model代码:
class Person(models.Model); name = models.CharField('作者姓名', max_length=10) age = models.IntegerField('作者年龄') class Book(models.Model): person = models.ForeignKey(Person, related_name='person_book') title = models.CharField('书籍名称', max_length=10) pubtime = models.DateField('出版时间')
1.1 从作者出发获取书籍
django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。filter好像有缓存数据的功能,第一次查询数据库并生成缓存,下次再调用filter方法的话,直接取得缓存的数据,会get方法每次执行都是直接查询数据库的,不知道这个是不是正确person = Person.objects.fiter(你的条件) book = person.book_set.all()
1.2.从书籍出发获取作者
p = book.person
二.多对多 ManyToManyField
models 代码class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() class Book(models.Model): title = models.CharField(max_length=200) authors = models.ManyToManyField(Author)
2.1 从书籍出发获取作者
django的get方法是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错b = Book.objects.get(id=50) b.authors.all() b.authors.filter(first_name='Adam')
2.2.从作者出发获取书籍
a = Author.objects.get(id=1) a.book_set.all()
2.3.添加对象方法
a = Author.objects.get(id=1) b = Book.objects.get(id=50) b.authors.add(a)
2.4.删除对象对象方法
a = Author.objects.get(id=1) b = Book.objects.get(id=50) b.authors.remove(a) 或者 b.authors.filter(id=1).delete()
相关文章推荐
- Django 1.5.4 专题八 Model
- Django 1.5.4 专题16 logging
- Django 1.5.4 专题三 添加admin.py
- Django 1.5.4 专题十 database relationships
- Django 1.5.4 专题11 file uploading and updating database schema
- Django 1.5.4 专题17 Form Service
- Django 1.5.4 专题24 Messages
- Django 1.5.4 专题四 Template 提高
- Django 1.5.4 专题二 urls 和 view 提高
- Django 1.5.4 专题25 Notifications
- Django 1.5.4 专题一 入门
- Django 1.5.4 专题18 User Profile
- Django 1.5.4 专题18 Custom template tags
- Django 1.5.4 专题13 Web Service with tastypie
- Django 1.5.4 专题27 pinax
- Django 1.5.4 专题19 heroku s3
- Django 1.5.4 专题20 fabric
- Django 1.5.4 专题14 Basic unit testing
- Django 1.5.4 专题21 haystack whoosh
- Django 1.5.4 专题26 Bootstrap