Python Django model之字段

本文介绍了Django模型中的字段类型,包括AutoField、BigIntegerField、BooleanField、CharField等,详细解释了每种字段的用途、特性和在数据库中的表现。此外,还探讨了关系字段,如ForeignKey、ManyToManyField和OneToOneField,阐述了它们在多对一、多对多和一对一关系中的应用,并提到了数据库中如何表示这些关系。
摘要由CSDN通过智能技术生成

模型简介与示例

模型是你的数据的唯一的、明确的信息源。它包含你所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。

  • 每个模型都是django.db.models.Model 的一个Python 子类。
  • 模型的每个属性都表示为数据库中的一个字段。
  • Django 提供一套自动生成的用于数据库访问的API;

示例
定义一个Person模型

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

first_name和last_name是模型的两个字段。每个字段都被指定成一个类属性,每个属性映射到一个数据库的列。

上面的Person 模型会在数据库中创建这样一张表:

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

注意事项:

  • 这个表的名称myapp_person,是根据 模型中的元数据自动生成的,也可以重写为别的名称。
  • id 字段是自动添加的,但这个行为可以被重写
  • 这个例子中的CREATE TABLE SQL 语句使用PostgreSQL 语法格式,要注意的是Django 会根据设置文件 中指定的数据库类型来使用相应的SQL 语句。

严格意义上来讲, Model 是定义在django.db.models.fields里面,但为了使用方便,它们被导入到 django.db.models中;标准上,我们导入from django.db import models,然后使用 models.Field的形式使用字段。

模型中的字段

对于一个模型来说,最重要的是列出该模型中属性与数据库所对应的字段。字段由models类属性指定。

字段类型

模型中的每个字段都是 Field 子类的某个实例。Django 根据字段类的类型确定以下信息:

数据库当中的列类型 (比如: INTEGER, VARCHAR)。
渲染表单时使用的默认HTML 部件(例如,<input type="text">, <select>)。
最低限度的验证需求,它被用在 Django 管理站点和自动生成的表单中。

Django 自带数十种内置的字段类型;如果内置类型仍不能满足你的要求,你也可以自由地编写符合你要求的字段类型。

  • AutoField(例:id = models.AutoField(primary_key=True))
    一个根据实际ID自动增长的IntegerField . 你通常不需要直接使用;如果不指定,一个主键字段将自动添加到你创建的模型中.详细查看 主键字段.
  • BigIntegerField
    一个64位整数, 类似于一个 IntegerField ,它的值的范围是 -9223372036854775808 到9223372036854775807之间. 这个字段默认的表单组件是一个TextInput.
  • BinaryField
    这是一个用来存储原始二进制码的Field. 只支持bytes 赋值,注意这个Field只有很有限的功能。例如,不大可能在一个BinaryField 值的数据上进行查询
    滥用BinaryField
    尽管你可能想使用数据库来存储你的文件,但是99%的情况下这都是不好的设计。这个字段 不是替代static files 的合理操作.
  • BooleanField
    true/false 字段。
    此字段的默认表单挂件是一个CheckboxInput.
    如果你需要设置null 值,则使用NullBooleanField 来代替BooleanField。
    如果Field.default没有指定的话, BooleanField 的默认值是 None。
  • CharField
    一个用来存储从小到很大各种长度的字符串的地方
    如果是巨大的文本类型, 可以用 TextField.
    这个字段默认的表单样式是 TextInput.
    CharField必须接收一个额外的参数:CharField.max_length
    字段的最大字符长度.max_length将在数据库层和Django表单验证中起作用, 用来限定字段的长度.
    注意
    如果你在写一个需要导出到多个不同数据库后端的应用,你需要注意某些后端对max_l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值