python后台架构Django教程——数据模型Model

本文详细介绍了Django中的数据模型Model,包括如何建立数据对象模型、元数据Meta、激活数据类型、数据库操作等。通过定义模型类,Django自动创建数据库表结构,提供基于python的数据库API。文章还涵盖了字段类型、关系类型、查询API的使用,如filter、exclude、get等,以及更新、删除记录的方法。此外,还讨论了如何直接使用数据库语言操作数据库和使用其他查询API进行复杂筛选。
摘要由CSDN通过智能技术生成

1.建立数据对象模型

Django通过自定义python类的形式来定义具体的模型,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,类中的每个变量代表数据表中的一列字段。Django通过ORM对数据库进行操作,奉行代码优先的理念,将python程序员和数据库管理员进行分工解耦。

假如我们创建两个对象,一个User,一个Diary,以表征用户和日志

from django.db import models
# 设置对象结构(对应数据库的结构)
class User(models.Model):
    username = models.CharField(max_length=200)  # 字符串类型字段
    password = models.CharField(max_length=200)  # 整数类型字段
    age = models.IntegerField(default=0)  # 整数类型字段
    date = models.DateField('date registered')  # 时间类型字段,参数为人类可读的字段名

class Diary(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)  # 外键
    content = models.TextField()  # 文本类型字段

相当于

CREATE TABLE app1_user (
    "id" serial NOT NULL PRIMARY KEY,
    "username" varchar(200) NOT NULL,
    "password" varchar(200) NOT NULL,
    "age" Int(11) NOT NULL,
    "date" Date NOT NULL
);

表名

表名app1_user由Django自动生成:app名+下划线+小写class名。你可以使用模型元数据Meta重写这部分功能的机制。后面我们学习关于元数据Meta的相关知识。

主键

Django默认自动创建自增主键id,当然,你也可以自己指定主键。

id = models.AutoField(primary_key=True)

这是一个自增字段,从1开始计数。如果你非要自己设置主键,那么请务必将字段设置为primary_key=True。Django在一个模型中只允许有一个自增字段,并且该字段必须为主键!

字段类型

每一个类都是django.db.models.Model的子类。每一个字段都是Field类的一个实例,例如用于保存字符数据的CharField和用于保存时间类型的DateTimeField,它们告诉Django每一个字段保存的数据类型。

Django内置了许多字段类型,它们都位于django.db.models中,例如models.CharField。这些类型基本满足需求,如果还不够,你也可以自定义字段。

常用字段类型:

类型 说明
AutoField 一个自动增加的整数类型字段。通常你不需要自己编写它,Django会自动帮你添加字段:id = models.AutoField(primary_key=True),这是一个自增字段,从1开始计数。如果你非要自己设置主键,那么请务必将字段设置为primary_key=True。Django在一个模型中只允许有一个自增字段,并且该字段必须为主键!
CharField 字符串类型。必须接收一个max_length参数,表示字符串长度不能超过该值。默认的表单标签是input text。最常用的filed,没有之一!
DateField class DateField(auto_now=False, auto_now_add=False, **options)日期类型。一个Python中的datetime.date的实例。在HTML中表现为TextInput标签。在admin后台中,Django会帮你自动添加一个JS的日历表和一个“Today”快捷方式,以及附加的日期合法性验证。两个重要参数:(参数互斥,不能共存) auto_now:每当对象被保存时将字段设为当前日期,常用于保存最后修改时间。auto_now_add:每当对象被创建时,设为当前日期,常用于保存创建日期(注意,它是不可修改的)。设置上面两个参数就相当于给field添加了editable=False和blank=True属性。如果想具有修改属性,请用default参数。例子:pub_time = models.DateField(auto_now_add=True),自动添加发布时间。
BooleanField 布尔值类型。默认值是None。在HTML表单中体现为CheckboxInput标签。如果要接收null值,请使用NullBooleanField。
DateTimeField 日期时间类型。Python的datetime.datetime的实例。与DateField相比就是多了小时、分和秒的显示,其它功能、参数、用法、默认值等等都一样。
TimeField 时间字段,Python中datetime.time的实例。接收同DateField一样的参数,只作用于小时、分和秒。
EmailField 邮箱类型,默认max_length最大长度254位。使用这个字段的好处是,可以使用DJango内置的EmailValidator进行邮箱地址合法性验证。
FloatField 浮点数类型,参考整数类型
IntegerField 整数类型,最常用的字段之一。取值范围-2147483648到2147483647。在HTML中表现为NumberInput标签。
GenericIPAddressField class GenericIPAddressField(protocol=’both’, unpack_ipv4=False, **options)[source],IPV4或者IPV6地址,字符串形式,例如192.0.2.30或者2a02:42fe::4在HTML中表现为TextInput标签。参数protocol默认值为‘both’,可选‘IPv4’或者‘IPv6’,表示你的IP地址类型。
TextField 大量文本内容,在HTML中表现为Textarea标签,最常用的字段类型之一!如果你为它设置一个max_length参数,那么在前端页面中会受到输入字符数量限制,然而在模型和数据库层面却不受影响。只有CharField才能同时作用于两者。
URLField 一个用于保存URL地址的字符串类型,默认最大长度200。

字段名称

每一个 Field 实例的名字就是字段的名字(如: username 或者 date )。在你的Python代码中会使用这个值,你的数据库也会将这个值作为表的列名。

你也可以在每个Field中使用一个可选的第一位置参数用于提供一个人类可读的字段名,让你的模型更友好,更易读,并且将被作为文档的一部分来增强代码的可读性。对于模型中的其他字段,机器名称就已经足够我们可读了。

字段参数

一些Field类必须提供某些特定的参数。例如CharField需要你指定max_length。这不仅是数据库结构的需要,同样也用于我们后面会谈到的数据验证功能。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值