ORM(二)常用字段小记

常用字段类型:

AutoField:字段自增,多用于ID主键字段,每个表中只能有一个AutoField字段类型。

id = models.AutoField(primary_key=True)  # 设置id字段为主键并自增长

AutoField字段是根据IntegerField类型自动递增的。而IntegerField的取值范围是:-2147483648到2147483647

BigAutoField:与AutoField功能相同都是自增,但是他的取值范围要更大:1到9223372036854775807

IntegerField:一个整数。取值范围-2147483648到2147483647。此字段的默认表单控件是 NumberInput当localize 为False或TextInput以其他方式。

BigIntegerField:一个64位整数,很像一个IntegerField不同之处在于它是保证从适合数字-9223372036854775808到 9223372036854775807。此字段的默认表单窗口小部件是a TextInput。

BinaryField:用于存储原始二进制数据的字段。它只支持bytes分配。请注意,此字段的功能有限。例如,无法过滤BinaryField值的查询集。也不可能在a BinaryField中包含a ModelForm。

PositiveIntegerField:像一个IntegerField,但必须是正数或零(0)。从价值观0到2147483647在Django支持的所有数据库的安全。0出于向后兼容性原因,接受该值。

BooleanField:真/假字段。此字段的默认表单窗口小部件是CheckboxInput。如果您需要接受null值,适用NullBooleanField。当Field.default 没有定义,默认值BooleanField是None。

NullBooleanField:像一个BooleanField,允许NULL作为选项之一。使用此而不是BooleanField使用null=True。此字段的默认表单窗口小部件是NullBooleanSelect。

CharField:字符串字段(varchar)。对于大量文本,请使用TextField。此字段的默认表单窗口小部件是TextInput。

CharField 有一个额外的必要参数:CharField(max_length=20)字段的最大长度(以字符为单位)。max_length在数据库级别和Django的验证中强制执行。

TextField:一个大的文本字段。此字段的默认表单窗口小部件是a Textarea。

如果指定max_length属性,它将反映在Textarea自动生成的表单字段的 窗口小部件中。但是,它不会在模型或数据库级别强制执行。

DateField:日期,由Python datetime.date实例表示。

有一些额外的可选参数:

  auto_now:每次保存对象时自动将字段设置为当前时间,该字段仅在Model.save()后,会更新该字段的日期。

  auto_now_add:首次创建对象时自动将字段设置为当前时间。此字段的默认表单窗口小部件是TextInput。管理员添加了一个JavaScript日历,以及“今天”的快捷方式。包含其他invalid_date错误消息密钥。选项auto_now_add,auto_now和default互相排斥。这些选项的任何组合都将导致错误。

DateTimeField:日期和时间,由Python datetime.datetime实例表示。采取相同的额外参数DateField。此字段的默认表单窗口小部件是单个 TextInput。管理员使用两个单独的 TextInput小部件和JavaScript快捷方式。

TimeField:一个时间,由Python datetime.time实例表示。接受相同的自动填充选项DateField。

此字段的默认表单窗口小部件是a TextInput。管理员添加了一些JavaScript快捷方式。

DecimalField:一个固定精度的十进制数,由Python Decimal实例表示。

有两个必需的参数:

DecimalField.max_digits:数字中允许的最大位数。请注意,此数字必须大于或等于decimal_places。

DecimalField.decimal_places:与数字一起存储的小数位数。

此字段的默认表单控件是NumberInput 当localize为False或 TextInput以其他方式。

DurationField:用于存储时间段的字段 - 用Python建模 timedelta。在PostgreSQL上使用时,使用interval的数据类型是Oracle,数据类型是。否则使用一微秒。INTERVAL DAY(9) TO SECOND(6)bigint

EmailField:CharField检查该值是否为有效电子邮件地址的A. 它用于EmailValidator验证输入。

FileField:文件上传字段。Django Admin以及ModelForm中提供读取文件夹下文件的功能

参数:
path, 文件夹路径
match=None, 正则匹配
recursive=False, 递归下面的文件夹
allow_files=True, 允许文件

FilePathField:文件路径字段,字符串,路径保存在数据库,文件上传到指定目录

参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage

FloatField:由float实例在Python中表示的浮点数。此字段的默认表单控件是NumberInput 当localize为False或 TextInput以其他方式。

ImageField:从中继承所有属性和方法FileField,但也验证上载的对象是有效图像。

除了可用于特殊属性FileField,一个ImageField也具有height和width属性。

为了便于查询这些属性,ImageField有两个额外的可选参数:

ImageField.height_field:每次保存模型实例时,将使用图像高度自动填充的模型字段的名称。

ImageField.width_field:每次保存模型实例时,将使用图像宽度自动填充的模型字段的名称。

ImageField实例在数据库中创建为varchar 默认最大长度为100个字符的列。与其他字段一样,您可以使用max_length参数更改最大长度。

此字段的默认表单窗口小部件是a ClearableFileInput。

GenericIPAddressField:IPv4或IPv6地址,采用字符串格式(例如192.0.2.30或 2a02:42fe::4)。此字段的默认表单窗口小部件是TextInput。

GenericIPAddressField.protocol:限制指定协议的有效输入。可接受的值是‘both‘(默认),‘IPv4‘ 或‘IPv6‘。匹配不区分大小写。

GenericIPAddressField.unpack_ipv4:解压缩IPv4映射地址,如::ffff:192.0.2.1。如果启用此选项,则该地址将被解压缩到 192.0.2.1。默认为禁用。只能在protocol设置为时使用‘both‘。如果允许空值,则必须允许空值,因为空值存储为空。

SlugField:Slug是一个报纸术语。slu is是一种短标签,只包含字母,数字,下划线或连字符。它们通常用于URL。

与CharField类似,您可以指定max_length(阅读有关数据库可移植性的说明以及max_length该部分中的说明)。如果max_length未指定,Django将使用默认长度50。

意味着设置Field.db_index为True。

基于某个其他值的值自动预填充SlugField通常很有用。您可以在管理员中自动执行此操作 prepopulated_fields。

SlugField.allow_unicode:如果True,该字段除ASCII字母外还接受Unicode字母。默认为False。

SmallIntegerField:像一个IntegerField,但只允许某个(数据库相关)点下的值。从价值观-32768到32767在Django支持的所有数据库的安全。

URLField:一个CharField一个网址。

此字段的默认表单窗口小部件是a TextInput。

与所有CharField子类一样,URLField采用可选 max_length参数。如果未指定 max_length,则使用默认值200。

UUIDField:用于存储通用唯一标识符的字段。使用Python的 UUID类。在PostgreSQL上使用时,它以uuid数据类型存储,否则存储在 char(32)。

通用唯一标识符是AutoFieldfor的 一个很好的替代品primary_key。数据库不会为您生成UUID,因此建议使用default:

import uuid
from django.db import models

class MyUUIDModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

关系字段:

ForeignKey:多对一的关系。需要两个位置参数:与模型相关的类和on_delete选项。(on_delete实际上并不需要,但不提供它会给出弃用警告。在Django 2.0中将需要它。)

要创建递归关系 - 与自身具有多对一关系的对象 - 使用。models.ForeignKey(‘self‘, on_delete=models.CASCADE)

如果需要在尚未定义的模型上创建关系,可以使用模型的名称,而不是模型对象本身:

on_delete选项:

CASCADE:级联删除。Django模拟SQL约束ON DELETE CASCADE的行为,并删除包含ForeignKey的对象。

PROTECT:通过引发ProtectedError子类来 防止删除引用的对象 django.db.IntegrityError。

SET_NULL:设置ForeignKeynull, 这是如果只可能 null是True。

SET_DEFAULT:将ForeignKey其设置为默认值;,ForeignKey必须设置的默认值 。

DO_NOTHING:不采取行动。如果数据库后端强制实施参照完整性,则IntegrityError除非您手动将SQL 约束添加到数据库字段,否则将导致这种情况。ON DELETE

SET():设置ForeignKey传递给的值SET(),或者传入 一个callable,调用它的结果。在大多数情况下,为了避免在导入models.py时执行查询,必须传递callable:

from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models

def get_sentinel_user():
    return get_user_model().objects.get_or_create(username=‘deleted‘)[0]

class MyModel(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET(get_sentinel_user),
    )

ManyToManyField:多对多的关系。需要一个位置参数与模型相关的类,它与ForeignKey作用完全相同 ,包括递归和 惰性关系。

可以使用字段添加,删除或创建相关对象 RelatedManager。

OneToOneField:一对一的关系。从概念上讲,这类似于 ForeignKeywith unique=True,但关系的“反向”方面将直接返回单个对象。

这作为模型的主键是最有用的,它以某种方式“扩展”另一个模型; 例如,通过从子模型向父模型添加隐式一对一关系来实现多表继承。

需要一个位置参数:与模型相关的类。这与它的工作方式完全相同ForeignKey,包括有关递归 和惰性关系的所有选项。

如果没有related_name为其指定参数OneToOneField,Django将使用当前模型的小写名称作为默认值。

参考文档:https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.AutoField

原文地址:https://www.cnblogs.com/caesar-id/p/10679653.html

时间: 2024-10-05 21:36:49

ORM(二)常用字段小记的相关文章

Django ORM中常用字段和参数

Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. 这里需要知道的是Django中的CharFiel

django ORM模型常用字段、字段常用参数

在定义字段类型时,如果没有设置null=True,默认为null=False,即默认字段不为空 AutoField:数据库层面为int 类型,自增长,如果不指定主键,模型会自动生成一个叫做 id 的自增长的主键.如果需要指定一个其他名字并且具自增长的主键,使用AutoField也是可以的 BigAutoField:类似AutoField,数据范围更大 BooleanField字段:模型层面值为True或False(数据库层面值为1或0,类型tinyint),并且不接受null=True,即该字段

python3开发进阶-Django框架的ORM常用字段和参数

阅读目录 常用字段 字段合集 自定义字段 字段参数 关系参数 多对多的关联关系的三种方式 一.常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.  (最大十位) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. DateField 日期字段,

Django—ORM常用字段和参数

一.ORM常用的字段和参数 1.0 常用字段 # AutoField: int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. # IntegerField: 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) # CharField: 字符类型,必须提供max_length参数, max_length表示字符长度 # DateField: 日期字

ORM常用字段及方式

创建小型数据库 模型层 ORM常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. DateField 日期字段,日期格式  YYYY-M

ORM常用字段和参数

ORM常用字段和参数 一.ORM字段 1. AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. 2. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647. 3. CharField 字符类型,必须提供max_length参数, max_length表示字符长度. 4. DateField 日期字段,日期格式 YYYY-MM-DD,相当于Python中的da

orm常用字段和数据库优化查询

一.Django ORM 常用字段和参数 1.常用字段 models中所有的字段类型其实本质就那几种,整形varchar什么的,都没有实际的约束作用,虽然在models中没有任何限制作用,但是还是要分门别类,对于校验性组件校验非常有用就比如说邮箱类型,你在输入邮箱的时候如果不按照邮箱格式输入,瞎鸡儿输入会提示你不合法,虽然输入的是字符串,但是不是规定的邮箱字符串 AutoField() [int primary key auto_increment)] int自增列,必须填入参数 primary

orm 常用字段及参数

一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可.如果Django发现你已经明确地设置了Field.primary_key,它将不会添加自动ID列. 本示例中的CREATE TABLE SQL使用PostgreSQL语法进行格式化,但值

models常用字段及参数,orm查询优化, choices参数及实际应用

一.自定义字段类型 from django.db import models # Create your models here. # 自定义CHAR类型 from django.db.models import Field class RealCharField(Field): # 这里是要继承Field类的 def __init__(self, max_length, *args, **kwargs): self.max_length = max_length # 拦截一个父类的方法 操作完