以Publisher、Author、Book的model爲例子javascript
#coding=utf-8 from django.db import models # Create your models here. class Publisher(models.Model): name=models.CharField(verbose_name="出版社",max_length=30) address=models.CharField(verbose_name="地址",max_length=50) city=models.CharField(verbose_name="城市",max_length=60) state_province=models.CharField(verbose_name="省份",max_length=30) country=models.CharField(verbose_name="國家",max_length=50) #加上blank=True能夠後臺對於這個字段就不是必須填了 website=models.URLField(verbose_name="網址",blank=True) #能夠在object中看到name信息 def __unicode__(self): return self.name #直接排序,每次查詢出來的都按name來默認排序 class Meta:
verbose_name = "出版社列表" ordering = ['name'] class Author(models.Model): first_name=models.CharField(verbose_name="姓",max_length=30) last_name=models.CharField(verbose_name="名",max_length=40) email=models.EmailField(verbose_name="郵箱",blank=True) def __unicode__(self): return self.first_name+self.last_name class Book(models.Model): title=models.CharField(verbose_name="書名",max_length=100) #注意ManyToManyField、ForeignKey這裏Author和Publisher必須放第一個 authors=models.ManyToManyField(Author,verbose_name=u"做者") publisher=models.ForeignKey(Publisher,verbose_name="出版社") #想要時間格式的數據爲空只能容許NULL值,故必須設blank=True,null=True publication_date=models.DateField(verbose_name="出版時間",blank=True,null=True) def __unicode__(self): return self.title
以下:java
一、Publisher.objects.all() 查詢所有字段信息。python
二、Publisher.objects.filter(name="xx",country="xx") 查詢name和country符合的Publisher對象數組。web
三、Publisher.objects.filter(name__contains="xx") 查詢name中存在指定項的Publisher對象數組。數據庫
四、Book.objects.filter(authors__first_name__exact="xx") 查詢Book中authors的first_name爲指定項的對象數組。exact是精確查詢。上面的contains是包含查詢。均可以進行關係聯查,能夠一直聯查下去。注意雙下劃線「__」。django
五、Publisher.objects.get(name="xx") 查詢name符合指定項的publisher對象,注意這裏不是數組,是一個對象。若是查詢中出現多個或沒有對象將拋出異常。能夠根據異常進行捕捉來處理。如:數組
try: p = Publisher.objects.get(name='Apress') except Publisher.DoesNotExist: print "Apress isn't in the database yet." else: print "Apress is in the database."
六、Publisher.objects.order_by("xx","xx") 查詢按指定項排列後的publisher對象數組。逆向排序能夠Publisher.objects.order_by("-xx")post
七、Publisher.objects.exclude(name="xx") 查詢除了指定name的publisher對象數組。編碼
八、Publisher.objects.create(name="xx",address="xxxx") 插入name和address到publisher中。也能夠分兩步:spa
p1=Publisher(name="xx",address="xxxx")
p1.save() 沒有save()的將不會插入數據庫。獲取到p1對象後能夠直接p1.name="xxx"來改name,而後記得p1.save()纔會存入數據庫。
九、PUblisher.objects.filter(id=1).update(name="xxx") 這直接修改了id=1的name值,返回更新數量,比上面的形式好。
十、Publisher.objects.filter(country="xx").delete() 刪除指定數據。
十一、Publisher.objects.order_by('name')[0] 只取第一個publisher對象。不支持負索引,不過能夠Publisher.objects.order_by('-name')[0]
publisher.objects.order_by('name')[1:3] 從前3個publisher對象中取第二個及之後的全部對象,這樣就去到了2個對象的數組。
連鎖查詢:
Publisher.objects.filter(country="xx").order_by("-name")
*************************************************************************************************************************
#coding=utf-8 from django.contrib import admin from books.models import * # Register your models here. class AuthorAdmin(admin.ModelAdmin): #指定在列表中視圖中展示的字段 list_display = ('first_name','last_name','email') #指定搜索的字段 search_fields = ('first_name','last_name') class BookAdmin(admin.ModelAdmin): list_display = ('title','publisher','publication_date') #`` 過濾器`` 一樣適用於其它類型的字段,而不單是`` 日期型`` (請在`` 布爾型`` 和`` 外鍵`` 字段上試試)。 #注意第一個字段後面必定要加‘,’ list_filter = ('publication_date',) #請注意,date_hierarchy接受的是* 字符串* ,而不是元組。由於只能對一個日期型字段進行層次劃分。 date_hierarchy = 'publication_date' #默認排序方式,和models中的class Meta的ordering同樣的原理。 ordering = ('-publication_date',) #排列的展示順序,不寫的就不會展示出來,就不能編輯改變了。 fields = ('title','authors','publication_date','publisher') #以左右選框的形式展示,注意models中的authors的verbose_name=u"中文",這裏必需要加u 否則不顯示javascript編碼失效了 filter_horizontal = ('authors',) #以id的方式顯示,可是能夠查詢的 # raw_id_fields = ('publisher',) admin.site.register(Book,BookAdmin) admin.site.register(Publisher) admin.site.register(Author,AuthorAdmin)
參考資料:http://my.oschina.net/kinegratii/blog/220276 http://www.pythontip.com/blog/post/12348/