django models Making queries

这是后面要用到的类

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __unicode__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()

    def __unicode__(self):
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateTimeField()
    mod_date = models.DateTimeField()
    authors = models.ManyToManyField(Author)
    n_comments = models.IntegerField()
    n_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __unicode__(self):
        return self.headline

Creating objects

>>> from blog.models import Blog
>>> b = Blog(name=‘Beatles Blog‘, tagline=‘All the latest Beatles news.‘)
>>> b.save()

Saving ForeignKey and ManyToManyField fields

>>> from blog.models import Entry
>>> entry = Entry.objects.get(pk=1)
>>> cheese_blog = Blog.objects.get(name="Cheddar Talk")
>>> entry.blog = cheese_blog
>>> entry.save()
>>> from blog.models import Author
>>> joe = Author.objects.create(name="Joe")
>>> entry.authors.add(joe)
>>> john = Author.objects.create(name="John")
>>> paul = Author.objects.create(name="Paul")
>>> george = Author.objects.create(name="George")
>>> ringo = Author.objects.create(name="Ringo")
>>> entry.authors.add(john, paul, george, ringo)

Retrieving objects

>>> Blog.objects
<django.db.models.manager.Manager object at ...>
>>> b = Blog(name=‘Foo‘, tagline=‘Bar‘)
>>> b.objects
Traceback:
    ...
AttributeError: "Manager isn‘t accessible via Blog instances."

Retrieving all objects

>>> all_entries = Entry.objects.all()

filter(**kwargs)

Returns a new QuerySet containing objects that match the given lookup parameters.

exclude(**kwargs)

Returns a new QuerySet containing objects that do not match the given lookup parameters.

Entry.objects.filter(pub_date__year=2006)

Chaining filters

>>> Entry.objects.filter(
...     headline__startswith=‘What‘
... ).exclude(
...     pub_date__gte=datetime.now()
... ).filter(
...     pub_date__gte=datetime(2005, 1, 1)
... )

get,get 方法会返回符合条件的那个元素,当没有符合筛选条件的元素是get方法会抛出一个 DoesNotExist的异常,所以要慎用

>>> one_entry = Entry.objects.get(pk=1)

Field lookups

筛选属性的时候的一些限制条件,基本格式是 field__lookuptype=value,注意是双下划线,下面是lookuptype

exact:Exact match,准确匹配,可以匹配到null(None) iexact: 不区分大小写的准确匹配

contains:包含                                                        icontains:不区分大小写的包含

in:在(一个筛选的列表)里面

gt :Greater than                                                    gte:Greater than or equal to.

lt:Less than.                                                          lte:Less than or equal to.

startswith,istartswith,endswith,iendswith

range:pub_date__range=(start_date, end_date))

year,month,day,weekday,

regex:正则表达式匹配,iregex,不区分大小写的

Aggregation functions

聚合函数,针对查询集合的一些操作

Avg:计算平均值,返回值类型float

Count:计算集合的元素个数,返回值类型int

Max,Min,Sum

p

时间: 2024-10-15 06:04:55

django models Making queries的相关文章

Django Models的数据类型 汇总

转自http://apps.hi.baidu.com/share/detail/21922174#content Django Models的数据类型 AutoField IntegerField BooleanField true/false CharField maxlength,必填 TextField CommaSeparatedIntegerField maxlength,必填 逗号分隔 DateField auto_now 可选,每次动作都会更新 auto_now _add 可选,一

django models 类型整理 version:1.8.3

django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 Field Params in database attention AutoField **options integer 在django代码内是自增 BooleanField **options boolean\bit   BinaryField [**options] blob   BigInt

django models 中choices之用法举例

CHOICES常用做单选属性,下面举例在django models中人物性别的用法: 我们先定义一个模型,名字为Students ,这个Students 包含了名字和性别两个字段,代码如下: from django.db import models class Students(models.Model): GENDER_CHOICES = ( (u'M', u'Male'), (u'F', u'Female'), ) name = models.CharField(max_length=60)

django models 数据库操作

django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class Message(models.Model): pass class Teacher(models.Model): pass class Student(models.Model): GENDER_CHOICES = ( ('male', "男"), ('female', "女&q

Django models ORM基础操作--白话聊Django系列

上次我们讲完了views视图,那我们这次来看一下Django强大的ORM,可以这么说,你不懂Django的ORM,你就不懂Django,那废话不多说 ORM又称关系对象映射,在ORM里,一张表就是一个类,一行数据就是类的一个对象 在Django中遵循code first的原则,即:根据代码中定义的类来自动生成数据库表 利用ORM来实现定义表,以及对表进行操作 注意:在连接数据库上,Django默认是连接MySQLdb的,但是在python3中,不是很完美的支持这个模块,所以创建的Django项目

django models

django 的models中有个_meta 类,里面包含了定义models的所有信息, 可以做很多事情, 获取所有字段的verbose_name def get_models_field(model):    fields={}    for field in model._meta.fields:       fields[field.name]=field.verbos_name    return fields _meta.fields

【Django Models】虚拟化提取Models公共的功能

1.需求 Django的Models定义了数据库的表,大家使用过程中很多表肯定有许多公共的操作.那么可以将一些公共的操作封装起来,就不需要在每一张表中再来重复的定义和使用了. 2.定义 还是从models中继承,定义一个JsonMode基类 class JsonMode(models.Model): 2.1 虚拟化 #Model基类,不会去创建数据表#默认按照时间逆序排列class Meta:    abstract = True 2.2 公共字段,例如排序 #Model基类,不会去创建数据表 

django models 建立好后,table也建仓成功了,为什么网页后台不显示的问题

刚学,遇到这个问题,所以向大神请教,大神给了两个词,admin ,register.感觉像被雷击中了一样,原来忘记了,注册(register) 解决方法就是:在admin.py中对你的model进行注册,假如你的model 是person, 对应的创建一个PersonAdmin,然后注册person from django.contrib import admin from models import Person,PersonAdmin # Register your models here.

django models实际操作中遇到的一些问题

问题1.将主键id改成自动生成的python3 manage.py migrate时报下面的错误 django.db.utils.InternalError: (1091, "Can't DROP 'id'; check that column/key exists") 我猜测是因为我改了两个表的主键,其中A表主键是B表的外键,删除会有问题 解决方法: 1.删除app下migrations文件夹中000开头的记录文件 2.删掉app对应的数据库drop database 数据库名; 4