第六单元 ORM字段及操作

文章目录

  • 1. 模型类字段
    • 1.1 BooleanField
    • 1.2 CharField
    • 1.3 DateField
    • 1.4 DecimalField
    • 1.5 FloatField
    • 1.6 IntegerField
  • 2. 字段属性
    • null
    • blank
    • choices
  • 3. 设置admin名和表名
  • 4. 增删改查
    • 4.1 添加
    • 4.2 删除
    • 4.3 修改
    • 4.4 查询
      • Q查询
      • F查询
      • 高级字

1. 模型类字段

1.1 BooleanField

True/False字段,默认值为None

sele_out = models.BooleanField(default=False, verbose_name='售空')

1.2 CharField

字符串字段

name = models.CharField(max_length=20, verbose_name='书名')

1.3 DateField

日期字段

pud_date = models.DateField(verbose_name='发布时间')

1.4 DecimalField

十进制浮点型字段

# max_digits=加上小数点的总数   decimal_places=小数点后的数量
height = models.DecimalField(max_digits=5, decimal_places:2, verbose_name="身高")

1.5 FloatField

浮点型字段

price = models.FloatField(verbose_name="价格")

1.6 IntegerField

整型字段

age = models.IntegerField(verbose_name="年龄")

2. 字段属性

null

如果该值为True,将在数据库中将控制存储为NULL

字符串字段CharFieldTextField要避免使用null,因为空值字符串将存储空字符串(“”),而不是null值。

对于字符串类型的数据字段,大多数情况下,django使用空字符串代表空值


blank

如果该值为True,则在验证时该字段值可以为空;

null为数据库存储层面可以为空,而blank为表单验证层面可以填写空值


choices

一个二元组的列表或元组;

元组中第一个值为真正在数据库中存储的值,第二个值为该选项的描述

该值一旦被设定,表单样式会显示选择框,而不是标准的文本框,选择框内的选项为choices中的元组

3. 设置admin名和表名

在模型类下

    # 元类
    class Meta:
        verbose_name = '书籍信息'       # admin名字
        verbose_name_plural = verbose_name  # 取掉"s"
        db_table = 'bookinfo'       # 数据库表名
    # 默认查询输出
    def __str__(self):
    	return self.name

4. 增删改查

需要先导包

from books.models import Bookinfo

4.1 添加

Bookinfo.objects.create(
    name='Js',
    pud_date='2010-12-12',
    read_count=500,
    comment_count=200,
    sele_out=False,
)

4.2 删除

Bookinfo.objects.filter(id=1)

4.3 修改

Bookinfo.objects.fiter(name='python').update(name='html')
# 修改
book = Bookinfo.objects.get(name='Js')
book.read_count = 666
book.save()

4.4 查询

# 查询编号为1的图书
Bookinfo.objects.get(id__exact=1)
# 查询书名包含'湖'的图书
Bookinfo.objects.filter(name__contains='湖')
# 查询书名以'部'结尾的图书
Bookinfo.objects.filter(name__endswith='部')
# 查询书名为空的图书
Bookinfo.objects.filter(name__isnull=True)
# 查询编号为1或3或5的图书
Bookinfo.objects.filter(id__in=[1,3,5])
# 查询编号大于3的图书
Bookinfo.objects.filter(id__gt=3)
# 查询1980年发表的图书
Bookinfo.objects.filter(pud_date__year='1980')
# 查询1990年1月1日后发表的图书
Bookinfo.objects.filter(pud_date__gt='1990-01-01')

Q查询

需要导入

from django.db.models import Q
# 查询阅读量大于20,并且编号小于3的图书。
Bookinfo.objects.filter(read_count__gt=20, id__lt=3)
from django.db.models import Q
Bookinfo.objects.filter(Q(read_count__gt=20) & Q(id__lt=3))
# 查询阅读量大于20,或编号小于3的图书。
Bookinfo.objects.filter(Q(read_count__gt=20) | Q(id__lt=3))
# 查询编号不等于3的图书。
Bookinfo.objects.exclude(id=3)
Bookinfo.objects.filter(~Q(id=3))

F查询

from django.db.models import F
# 查询阅读量大于等于评论量的图书。
from django.db.models import  F     # 字段和字段比较用F
Bookinfo.objects.filter(read_count__gt=F('comment_count'))
# 查询阅读量大于2倍评论量的图书。
Bookinfo.objects.filter(read_count__gt=F('comment_count')*2)

高级字

需要导入

from django.db.models import Max, Min, Sum, Count, Avg
# 查询图书的总阅读量。
Bookinfo.objects.aggregate(Sum('read_count'))
# 查询图书总数。
Bookinfo.objects.count()
Bookinfo.objects.aggregate(Count('id'))
#
# 查询所有书籍信息平按照阅读量排序。
Bookinfo.objects.all().order_by('read_count')
Bookinfo.objects.all().order_by('-read_count')

你可能感兴趣的:(django)