
# P05 Django-models的常用字段和常用配置

## **常用字段**
在Django中，常用的字段类型用于在模型中定义数据模型的字段，每种字段类型对应数据库中的不同数据类型，并提供了特定的功能和选项。以下是一些Django中常用的字段类型：

`CharField` 用于存储字符串类型，有最大长度限制

`IntegerField` 用于存储整数类型

`FloatField`用于存储浮点数类型

`BooleanField` 用于存储布尔类型

`DateField` 用于存储日期类型

`DateTimeField` 用于存储日期和时间类型

`ImageField` 用于存储图片类型

`FileField` 用于存储文件类型

`ForeignKey` **外键** 用于表示数据库表之间的关联关系

`OneToOneField` **一对一** 用于表示数据库表之间的一对一关系

`ManyToManyField` **多对多** 用于表示数据库表之间多对多的关联关系
 　　‍
## **字段选项**
在Django中，字段选项用于为模型中的字段提供额外的配置。以下是一些常用的字段选项：

`primary_key` 字段是否为主键，默认为 False。

`max_length` 字段的最大长度限制，可以应用于多种不同的字段类型。

`verbose_name` 字段的友好名称，在管理界面或数据库中代替原始字段的名称来显示。

`default` 指定字段的默认值。

`null` 指定字段是否可以为空。

`null=True` 设置允许该字段为 NULL 值

`blank` 指定在表单中输入时是否可以为空白。

`choices` 用于指定字段的可选值枚举列表,在最上面定义

`editable` 默认为True，表示字段在表单中可以编辑

`unique` 字段是否唯一，默认为 False。


## 字段定义
```py
class Status(TextChoices):
    QUALIFIED = 'qualified', '良品'  # 良品选项，值为'qualified'，显示名称为'良品'
    UNQUALIFIED = 'unqualified', '不良品'  # 不良品选项，值为'unqualified'，显示名称为'不良品'

class DeliveryMaterial(Model):
    status = models.CharField(
        max_length=32,
        choices=Status.choices,
        default=Status.QUALIFIED,
        verbose_name='状态'
    )
```

`TextChoices` 是 Django 3.0 引入的一个枚举类，用于在模型字段中创建可选择的、文本值的选项。

`related_name` 指定在多对多等关系中反向使用的名称。
 
`on_delete` 指定如果外键关联的对象被删除时应该采取什么操作。


由此在前面产品信息表的语句可以解释为：
```
category = ForeignKey('data.GoodsCategory', on_delete=SET_NULL, null=True,related_name='goods_set', verbose_name='产品分类')
```
该段定义了一个外键字段 `category`，它建立了当前`Goods`模型与名为 `GoodsCategory` 的模型之间的关联，一个`GoodsCategory`可以关联多个当前模型的实例，表示一个类别下可以有多个产品。当所关联的记录被删除时，该字段会自动设置为 NULL，它可以为空。`related_name` 设置了反向查询的名称，在 `GoodsCategory` 模型中，可以通过 `goods_set` 这个属性来访问所有关联的产品对象集合。
　　‍
### 课后习题：
[课后练习题](/contents/P13.md#5-创建班级和学生表)
