django查询常用操作符及models和admin的写法
以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/
django查询常用操作符及models和admin的写法的更多相关文章
- Django 测试开发3 数据模型models和admin管理工具
参考:https://blog.csdn.net/weixin_44510615/article/details/89425412 1.Django模型字段常用类型: IntegerField : 整 ...
- Django 二——models(admin、ORM),一对一、一对多、多对多操作,all、values、value_list的对比
内容概要 1.关系对象映射ORM 2.admin的配置(选修) 3.all().values().value_list()的对比 4.数据库操作(一对一.一对多.多对多) 5.HttpResponse ...
- Django——7 常用的查询 常用的模型字段类型 Field的常用参数 表关系的实现
Django 常用的查询 常用的查询方法 常用的查询条件 常用字段映射关系 Field常用参数 表关系的实现 查用的查询方法 这是需要用到的数据 from django.http import Htt ...
- Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段
单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...
- [django]django查询最佳实战
from django.db.models import Max, Min, Sum, Avg, Count, Q, F Django中的F和Q函数 一.F介绍 作用:操作数据表中的某列值,F()允许 ...
- Django -查询数据库相关操作
一. 内置Admin 依赖APP: django.contrib.auth django.contrib.contenttypes django.contrib.messages django.con ...
- Django中常用字段
一.Django框架的常用字段 Django ORM 常用字段和参数 常用字段 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列 ...
- Django orm常用字段和字段参数
1.Object Relational Mapping(ORM) 1.1ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象 ...
- Django (二) 常用字段及 ORM
MVC介绍 Django生命周期 many-to-many One-to-many Django常用字段 CharFiled 需要有max_length unique=True(代表不能重名) Ema ...
随机推荐
- 为一张PCI卡打通经络的过程
一张PCI卡通过“一转二”的转接卡插在主板上,probe调用失败,日志显示读取配置空间的时候发生了奇偶校验错误,可是使用相同的转接卡把它插在另外一台相同机器的主板上时,却运行正常,这就说明不是转接卡的 ...
- Safari浏览器Session问题
Safari浏览器中经常出现session无法写入或同一个会话中Session ID常变动的事情.尤其以iOS7版本居多. 问题本身并不难猜,应该就是cookie无法写入引起的.奇怪的是,部分同版本的 ...
- 前端JS开发框架-DHTMLX--dhtmlXTree
介绍 dhtmlxTree是一个功能丰富的JavaScript树菜单 它允许您快速添加一个好看的,基于ajax的web页面的分层树. treeview支持在线节点编辑.先进的拖放,三态复选框等等.由 ...
- strace
-c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 如果提供-o filename,则所有进程 ...
- 截获导航控制器系统返回按钮的点击pop及右滑pop事件
前几天看了@栾小布的一篇文章:Custom backBarButtonItem,在跟着做的时候我又顺便扩展了一些,写此文章的目的是为了总结一下自己所写的东西,方便以后翻看容易,同时也是自己入行iOS一 ...
- Android(java)学习笔记162:Android启动过程(转载)
转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...
- [oracle 11g 新特性] virtual column虚拟列
总结:虚拟列可以使用于一些特殊场合,实质是类似于函数列(即以 表中已有的列 经过函数运算得来),“虚拟列不存储在数据库中,是在执行查询时由oracle后台计算出来返回给用户”,因此虚拟列不会增加存储空 ...
- linux 软连接方式实现上传文件存储目录的无缝迁移
背景: 由于前期的磁盘空间规划与后期的业务要求不符合.原先/home被用于用户上传文件的存储目录,但是由于上传文件的逐渐增多,而原来的/home目录的空间不足,需要给/home目录进行扩容.同时各个应 ...
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
今天把notice表中的content字段改为long字段后,含有该字段的使用CTE的查询语句报错了.提示一下错误 ### Cause: java.sql.SQLException: 流已被关闭 ; ...
- SQL 收缩数据库文件大小
USE WebExam; GO ALTER DATABASE WebExam SET RECOVERY SIMPLE; GO -- 收缩文件到 1 MB. ); GO ALTER DATABASE W ...