classe de modèle django - champs, attributs

Modèle

C'est le 4e jour de ma participation au défi de mise à jour d'août. Pour plus de détails sur l'événement, veuillez consulter : Défi de mise à jour d'août

Les modèles sont la source unique et non ambiguë d'informations sur vos données. Il contient les champs de base et le comportement des données que vous stockez. En règle générale, chaque modèle correspond à une seule table de base de données.

Notions de base:

  • Chaque modèle est une classe Python qui étend django.db.models.Model.
  • Chaque propriété du modèle représente un champ de base de données.

1. Exemple

Cet exemple de modèle en définit un Person, qui a une first_namesommelast_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_nameet sont les champslast_name du modèle . Chaque champ est spécifié en tant qu'attribut de classe et chaque attribut correspond à une colonne de base de données.

Le Personmodèle ci-dessus créera une table de base de données comme celle-ci :

CREATE TABLE app_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);
复制代码

illustrer:

  • Un app_person (nom d'application enregistré par vous-même) sera généré dans la base de données, et ce nom de base de données peut être remplacé par db_table

    • db_table = 'test_person'
      复制代码
  • Nous n'avons pas créé de champ d'identifiant, mais il sera ajouté par défaut pour nous, mais cet identifiant peut également être remplacé

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

2. Utilisez le modèle

Après avoir défini la classe de modèle, nous devons la migrer vers la base de données

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

Remarquer:

Si nous n'enregistrons pas INSTALLED_APPS dans settings.py, il ne sera pas migré. N'oubliez pas d'utiliser

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

3. Type de champ

Le tableau suivant répertorie tous les types de champs intégrés à Django, à l'exception des types de champs relationnels (les noms de champs sont en casse camel, veillez donc à faire attention aux débutants) :

taper illustrer
Champ automatique Un champ de type entier auto-incrémenté. Habituellement, vous n'avez pas besoin de l'écrire vous-même, Django ajoutera automatiquement des champs pour vous : id = models.AutoField(primary_key=True), qui est un champ auto-incrémenté, à partir de 1. Si vous devez définir vous-même la clé primaire, veillez à définir le champ sur primary_key=True. Django n'autorise qu'un seul champ d'auto-incrémentation dans un modèle, et ce champ doit être la clé primaire !
GrandChampAuto Champ d'auto-incrémentation de type entier 64 bits, la plage de nombres est plus grande, de 1 à 9223372036854775807
GrandChampEntier 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参数允许您覆盖该字段将引发的错误默认消息
Texte d'aide Texte "d'aide" supplémentaire à afficher avec les widgets de formulaire. Même si votre champ n'est pas utilisé sur le formulaire, il peut être utilisé sur le document.
clé primaire Si True, alors le champ est la clé primaire du modèle
unique Si True, le champ doit être unique dans la table.
nom_verbeux Nom lisible du champ. Si aucun nom détaillé n'est donné, Django le créera automatiquement en utilisant le nom d'attribut du champ, en convertissant les traits de soulignement en espaces

\

Je suppose que tu aimes

Origine juejin.im/post/6992354581476966431
conseillé
Classement