django查询经常使用操做符及models和admin的写法

以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/

相关文章
相关标签/搜索