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
新聞熱點
疑難解答