djangoモデルクラス-フィールド、属性

モデル

8月のアップデートチャレンジに参加して4日目です。イベントの詳細については、8月のアップデートチャレンジをご覧ください。

モデルは、データに関する単一の明確な情報源です。これには、保存するデータの基本的なフィールドと動作が含まれています。通常、各モデルは単一のデータベーステーブルにマップされます。

基本知識:

  • 各モデルは、django.db.models.Modelを拡張するPythonクラスです。
  • モデルの各プロパティは、データベースフィールドを表します。

1.例

このサンプルモデルはPersonfirst_name合計が次の1つを定義しますlast_name

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 app_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);
复制代码

説明:

  • app_person(自分で登録したアプリ名)がデータベースに生成され、このデータベース名はdb_tableで上書きできます。

    • db_table = 'test_person'
      复制代码
  • idフィールドは作成しませんでしたが、デフォルトで追加されますが、このIDはオーバーライドすることもできます

    • id = models.BigAutoField(primary_key=True)
      复制代码

2.モデルを使用する

モデルクラスを定義したら、それをデータベースに移行する必要があります

python manage.py makemigrations # 生成迁移文件,都放在migrations中,
python manage.py migrate # 迁移,迁移成功会在数据库中有记录
复制代码

知らせ:

INSTALLED_APPSをsettings.pyに登録しないと、移行されません。使用することを忘れないでください

INSTALLED_APPS = [
    ...
    'app',  # 自己使用startapp注册的
    ...
]
复制代码

3.フィールドタイプ

次の表に、リレーショナルフィールドタイプを除くすべてのDjango組み込みフィールドタイプを示します(フィールド名はキャメルケースであるため、初心者に注意してください)。

タイプ 説明する
AutoField 自動インクリメントされた整数型フィールド。通常、自分で作成する必要はありません。Djangoは自動的にフィールドを追加します。id = models.AutoField(primary_key=True)これは、1から数えて自動インクリメントされるフィールドです。主キーを自分で設定する必要がある場合は、必ずフィールドをに設定してprimary_key=Trueください。Djangoでは、モデル内で1つの自動インクリメントフィールドのみが許可されており、このフィールドが主キーである必要があります。
BigAutoField 64ビット整数型の自動インクリメントフィールド。数値範囲は1から9223372036854775807まで大きくなります。
BigIntegerField 64位整数字段(看清楚,非自增),类似IntegerField ,-9223372036854775808 到9223372036854775807。在Django的模板表单里体现为一个NumberInput标签。
BinaryField 存储原始二进制数据的字段。
BooleanField 布尔值类型。默认值是None。在HTML表单中体现为CheckboxInput标签。如果设置了参数null=True,则表现为NullBooleanSelect选择框。可以提供default参数值,设置默认值。
CharField 最常用的类型,字符串类型。必须接收一个max_length参数,表示字符串长度不能超过该值。默认的表单标签是text input。
DateField auto_now:保存对象时自动将字段设置为现在(当前时间) auto_now_add:首次创建对象时自动将字段设置为现在。用于创建时间戳
DateTimeField 日期和时间,在 Python 中由datetime.datetime实例表示。
DecimalField 一个固定精度的十进制数,在 Python 中由一个 Decimal实例表示。有两个必需的参数
DurationField 用于存储时间段的字段
EmailField 使用CharField来检查该值是否为有效电子邮件地址
FileField 文件上传字段。
FilePathField 文件路径类型,后面单独介绍
FloatField 浮点数类型,对应Python的float。参考整数类型字段。
ImageField 图像类型,后面单独介绍。
IntegerField 整数类型,最常用的字段之一。取值范围-2147483648到2147483647。在HTML中表现为NumberInput或者TextInput标签。
GenericIPAddressField class GenericIPAddressField(protocol='both', unpack_ipv4=False, **options),IPV4或者IPV6地址,字符串形式,例如192.0.2.30或者2a02:42fe::4。在HTML中表现为TextInput标签。参数protocol默认值为‘both’,可选‘IPv4’或者‘IPv6’,表示你的IP地址类型。
JSONField JSON类型字段。Django3.1新增。签名为class JSONField(encoder=None,decoder=None,**options)。其中的encoder和decoder为可选的编码器和解码器,用于自定义编码和解码方式。如果为该字段提供default值,请务必保证该值是个不可变的对象,比如字符串对象。
PositiveBigIntegerField 正的大整数,0到9223372036854775807
PositiveIntegerField 正整数,从0到2147483647
PositiveSmallIntegerField 较小的正整数,从0到32767
SlugField slug是一个新闻行业的术语。一个slug就是一个某种东西的简短标签,包含字母、数字、下划线或者连接线,通常用于URLs中。可以设置max_length参数,默认为50。
SmallAutoField Django3.0新增。类似AutoField,但是只允许1到32767。
SmallIntegerField 小整数,包含-32768到32767。
TextField 用于储存大量的文本内容,在HTML中表现为Textarea标签,最常用的字段类型之一!如果你为它设置一个max_length参数,那么在前端页面中会受到输入字符数量限制,然而在模型和数据库层面却不受影响。只有CharField才能同时作用于两者。
TimeField 时间字段,Python中datetime.time的实例。接收同DateField一样的参数,只作用于小时、分和秒。
URLField 一个用于保存URL地址的字符串类型,默认最大长度200。
UUIDField 用于保存通用唯一识别码(Universally Unique Identifier)的字段。使用Python的UUID类。在PostgreSQL数据库中保存为uuid类型,其它数据库中为char(32)。这个字段是自增主键的最佳替代品,后面有例子展示。

4.关系字段

ForeignKey 一对多
OneToOneField 一对一
ManyToManyField 多对多

5.字段选项

null 如果True,可以存储空值。默认为False。
blank 如果True,则允许该字段为空。默认为False(True表单验证将允许输入空值)
choices CHOICES = [ ('SR', 'Senior'), ('GR', 'Graduate'), ] 每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是可读的名称
db_column 用于此字段的数据库列的名称。如果没有给出, 将使用该字段的名称。
db_index 如果True,将为此字段创建数据库索引。
db_tablespace 用于此字段索引的[数据库表空间的名称(如果此字段已编入索引)。默认值是项目的 `DEFAULT_INDEX_TABLESPACE设置(如果已设置)或 db_tablespace模型的设置(如果有)。如果后端不支持索引表空间,则忽略此选项。
default 字段的默认值
editable 如果是False,该字段将不会 ModelForm中。在模型验证期间它们也会被跳过。默认为True
error_messages error_messages参数允许您覆盖该字段将引发的错误默认消息
ヘルプテキスト フォームウィジェットで表示する追加の「ヘルプ」テキスト。フォームでフィールドが使用されていない場合でも、ドキュメントで使用できます。
primary_key の場合True、フィールドはモデルの主キーです
個性的 の場合True、フィールドはテーブル全体で一意である必要があります。
verbose_name 人間が読める形式のフィールドの名前。詳細な名前が指定されていない場合、Djangoはフィールドの属性名を使用して自動的に名前を作成し、アンダースコアをスペースに変換します

\

おすすめ

転載: juejin.im/post/6992354581476966431