以Publisher、Author、Book的model为例子

#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

如下:

1、Publisher.objects.all() 查询全部字段信息。

2、Publisher.objects.filter(name="xx",country="xx") 查询name和country符合的Publisher对象数组。

3、Publisher.objects.filter(name__contains="xx") 查询name中存在指定项的Publisher对象数组。

4、Book.objects.filter(authors__first_name__exact="xx") 查询Book中authors的first_name为指定项的对象数组。exact是精确查询。上面的contains是包含查询。都可以进行关系联查,可以一直联查下去。注意双下划线“__”。

5、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."

6、Publisher.objects.order_by("xx","xx") 查询按指定项排列后的publisher对象数组。逆向排序可以Publisher.objects.order_by("-xx")

7、Publisher.objects.exclude(name="xx") 查询除了指定name的publisher对象数组。

8、Publisher.objects.create(name="xx",address="xxxx") 插入name和address到publisher中。也可以分两步:

  p1=Publisher(name="xx",address="xxxx")

  p1.save() 没有save()的将不会插入数据库。获取到p1对象后可以直接p1.name="xxx"来改name,然后记得p1.save()才会存入数据库。

9、PUblisher.objects.filter(id=1).update(name="xxx") 这直接修改了id=1的name值,返回更新数量,比上面的形式好。

10、Publisher.objects.filter(country="xx").delete() 删除指定数据。

11、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/

最新文章

  1. Java|今天起,别再扯订阅和回调函数
  2. PL/SQL重新编译包无反应
  3. Java重点之小白解析--浅谈数据流形式图片上载
  4. 动态获取项加入到SQL中去统计
  5. ThinkPHP 3.2.2跨控制器调用方法
  6. ADs系列之通用数据解析服务GAS(即将开源)
  7. Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集
  8. android include中的控件调用
  9. [51nod1743]雪之国度
  10. Java生成全局唯一ID代码演示
  11. NVCC src/caffe/util/math_functions.cu
  12. GSM:嗅探语音流量
  13. sdn-准备-虚拟机迁移-vxlan
  14. MS SQL CASE WHEN 的用法
  15. 一、tars简单介绍 二、tars 安装部署资料准备
  16. change safari user agent
  17. 《杜增强讲Unity之Tanks坦克大战》2-场景设置
  18. 可供前端工程师选择的精彩CSS框架
  19. 平台支持的从经典部署模型到 Azure Resource Manager 的 IaaS 资源迁移
  20. App测试从入门到精通之UI测试

热门文章

  1. 利用PS脚本自动删除7天之前建立的目录-方法1!
  2. Eclipse reports that Android SDK Content Loader has encountered a problem. parseSdkContent failed.
  3. struts2+ajax
  4. struts----用Action的属性接收参数
  5. ZooKeeper 分布式锁实现
  6. 关于IPv6
  7. Yii::app()方法详解
  8. 利用javascript实现文本的自动输出
  9. sdk 提示至少需要Build-tools 19.1.0以上的解决方式
  10. 【转】【SQL SERVER】怎样处理作业中的远程服务器错误(42000)