DJANGO学习--模型类

一、模型类

(一)、表结构

CharField(max_length=字符长度):字符串。TextField:大文本字段,一般超过4000个字符时使用。
– 参数max_length表示最大字符个数。
IntegerField:整数。
FloatField:浮点数
DecimalField(max_digits=None, decimal_places=None):十进制浮点数。
– 参数max_digits表示总位数。
– 参数decimal_places表示小数位数。
DateField[auto_now=False, auto_now_add=False]):日期。
– 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。
– 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。
– 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。
TimeField:时间,参数同DateField。
DateTimeField:日期时间,参数同DateField。
FileField:上传文件字段。
ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片。
在实际开发中不会真的把文件或者图片存到数据库中,而是将文件或者图片放在指定的目录,数据库中记录文件的具体路径。

(二)、关系:

1.一对多关系
    models.ForignKey() 外键约束
    定义在多类中
2 多对多关系
    models.ManyToManyField()
    定义在哪一个都行
3 一对一关系
    models.OntoOneField()
    定义在哪一个类都可以

(三)、元选项

在模型类中定义类Meta,用于设置元信息
1、元信息db_table:定义数据表名称,推荐使用小写字母

class Meta():
	db_table = "bookinfo"

2、ordering:对象的默认排序字段,字符串前加-表示倒序,不加-表示正序

class Meta():
        ordering = ['id']

(三)、管理站点

1、创建一个管理员用户
python manage.py createsuperuser,按提示输入用户名、邮箱、密码
2、管理界面本地化
编辑settings.py文件,设置编码、时区
LANGUAGE_CODE = ‘zh-Hans’
TIME_ZONE = ‘Asia/Shanghai’
3、向admin注册booktest的模型
打开booktest/admin.py文件,注册模型
from django.contrib import admin
from models import BookInfo
admin.site.register(BookInfo)
4、自定义管理页面
(1)、Django提供了admin.ModelAdmin类
通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式
class QuestionAdmin(admin.ModelAdmin):
  ...
admin.site.register(Question, QuestionAdmin)
(2)、列表页属性
list_display:显示字段,可以点击列头进行排序
list_display = [‘pk’, ‘btitle’, ‘bpub_date’]
list_filter:过滤字段,过滤框会出现在右侧
list_filter = [‘btitle’]
search_fields:搜索字段,搜索框会出现在上侧
search_fields = [‘btitle’]
list_per_page:分页,分页框会出现在下侧
list_per_page = 10
(3)、添加、修改页属性
fields:属性的先后顺序
fields = [‘bpub_date’, ‘btitle’]
fieldsets:属性分组
fieldsets = [
(‘basic’,{‘fields’: [‘btitle’]}),
(‘more’, {‘fields’: [‘bpub_date’]}),
]

四、管理器

管理器是Django的模型进行数据库的查询操作的接口,Django应用的每个模型都拥有至少一个管理器
自定义管理器类主要用于两种情况
情况一:向管理器类中添加额外的方法:见下面“创建对象”中的方式二
情况二:修改管理器返回的原始查询集:重写get_queryset()方法

class BookInfoManager(models.Manager):
    def get_queryset(self):
        return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
class BookInfo(models.Model):
    ...
    books = BookInfoManager()

五、模型查询

1、查询集
返回查询集的方法,称为过滤器
all()
filter()
exclude()
order_by()
values():一个对象构成一个字典,然后构成一个列表返回
2、返回单个值的方法
get():返回单个满足条件的对象
如果未找到会引发"模型类.DoesNotExist"异常
如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常
count():返回当前查询的总条数
first():返回第一个对象
last():返回最后一个对象
exists():判断查询集中是否有数据,如果有则返回True
3、比较运算符
(2)contains:是否包含,大小写敏感 exclude(btitle__contains=‘传’)
(3)startswith、endswith:以value开头或结尾,大小写敏感
(4)in:是否包含在范围内
(5)gt、gte、lt、lte:大于、大于等于、小于、小于等于
(6)year、month、day、week_day、hour、minute、second:对日期间类型的属性进行运算
ilter(bpub_date__year=1980)
filter(bpub_date__gt=date(1980, 12, 31))
(7)聚合函数
使用aggregate()函数返回聚合函数的值
函数:Avg,Count,Max,Min,Sum
from django.db.models import Max
maxDate = list.aggregate(Max(‘bpub_date’))
(8)F对象:可以使用模型的字段A与字段B进行比较,如果A写在了等号的左边,则B出现在等号的右边,需要通过F对象构造
list.filter(bread__gte=F(‘bcommet’)) //阅读量大于评论量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值