from blog.models import Blogb = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')#调用save后才会在表中生成记录,b.id才会有值,因为id是数据库生成的#此处save相当于调用了insert语句b.save()b.name="Tom"#此处save相当于调用update语句b.save()Blog.objects.create(name='news Blog', tagline='All news.')
#create方法包含创建对象并save到数据库
from blog.models import Entryentry = Entry.objects.get(pk=1)cheese_blog = Blog.objects.get(name="Cheddar Talk")#ForeighnKey成员,直接赋值entry.blog = cheese_blogentry.save()#ManyToManyField成员需要调用add方法joe = Author.objects.create(name="Joe")entry.authors.add(joe)#添加多个成员时paul = Author.objects.create(name="Paul")george = Author.objects.create(name="George")ringo = Author.objects.create(name="Ringo")entry.authors.add(paul,george,ringo)
#执行两次数据库查询PRint([e.headline for e in Entry.objects.all()])print([e.pub_date for e in Entry.objects.all()])queryset = Entry.objects.all()print([p.headline for p in queryset]) # Evaluate the query set.print([p.pub_date for p in queryset]) # Re-use the cache from the evaluation.queryset = Entry.objects.all()#只返回queryset中的一部分print queryset[5] # Queries the databaseprint queryset[5] # Queries the database againqueryset = Entry.objects.all()[entry for entry in queryset] # Queries the databaseprint queryset[5] # Uses cacheprint queryset[5] # Uses cache#如下操作都会导致queryset evaluated,填充cache[entry for entry in queryset]bool(queryset)entry in querysetlist(queryset)
Entry.objects.all()[:5]Entry.objects.all()[5:10]Entry.objects.order_by('headline')[0]
#查找外键blog id=4的所有EntryEntry.objects.filter(blog_id=4)
#效果相同Blog.objects.get(id__exact=14) Blog.objects.get(id=14)
#相当于SELECT ... WHERE headline LIKE '%Lennon%';Entry.objects.get(headline__contains='Lennon')
#entry与blog是多对一的关系Entry.objects.filter(blog__name='Beatles Blog')Blog.objects.filter(entry__headline__contains='Lennon')#entry与authors是多对多关系Blog.objects.filter(entry__authors__name='Lennon')Blog.objects.filter(entry__authors__name__isnull=True)Blog.objects.filter(entry__authors__isnull=False, entry__authors__name__isnull=True)
#返回的blog 同时满足参数中的两个条件Blog.objects.filter(entry__headline__contains='Lennon', entry__pub_date__year=2008)#blog包含多个entry,只要其中有两个分别满足下面两个条件,就返回blogBlog.objects.filter(entry__headline__contains='Lennon').filter( entry__pub_date__year=2008)
Q(question__startswith='Who') | ~Q(pub_date__year=2005)Poll.objects.get( Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)), question__startswith='Who')
reporter = Reporters.objects.get(name='Tintin')reporter.stories_filed += 1reporter.save()#与上面代码效果相同reporter = Reporters.objects.filter(name='Tintin')reporter.update(stories_filed=F('stories_filed') + 1)#更新所有stories_fieldReporter.objects.all().update(stories_filed=F('stories_filed') + 1)
Entry.objects.filter(authors__name=F('blog__name'))
e.delete()Entry.objects.filter(pub_date__year=2005).delete()Entry.objects.all().delete()b = Blog.objects.get(pk=1)# This will delete the Blog and all of its Entry objects.b.delete()
blog = Blog(name='My blog', tagline='Blogging is easy')blog.save() # blog.pk == 1# 设置pk为Noneblog.pk = Noneblog.save() # blog.pk == 2
class ThemeBlog(Blog): theme = models.CharField(max_length=200)django_blog = ThemeBlog(name='Django', tagline='Django is easy', theme='python')django_blog.save() # django_blog.pk == 3#需要设置id和pk为Nonedjango_blog.pk = Nonedjango_blog.id = Nonedjango_blog.save() # django_blog.pk == 4
entry = Entry.objects.all()[0] # some previous entryold_authors = entry.authors.all()entry.pk = Noneentry.save()entry.authors = old_authors # saves new many2many relations
新闻热点
疑难解答