全书目录

第十四篇:Django 完全指南 —— 中央行政城区宇宙

第六章:Model —— 行政档案制度从这里开始

1 分钟 254 字 第 280 / 962 个阅读单元

如果说 View 是窗口,Model 就是档案制度

不是只有“数据库表”这么简单,而是:

  • 数据字段长什么样
  • 字段间关系是什么
  • 默认排序是什么
  • 一条记录如何被人类识别

我们给许可证处建一个模型:

py
from django.conf import settings
from django.db import models

class Permit(models.Model):
    class Status(models.TextChoices):
        PENDING = "pending", "待审批"
        APPROVED = "approved", "已批准"
        REJECTED = "rejected", "已驳回"

    title = models.CharField("事项标题", max_length=120)
    department = models.CharField("所属部门", max_length=50)
    description = models.TextField("申请说明", blank=True)
    status = models.CharField(
        "状态",
        max_length=20,
        choices=Status.choices,
        default=Status.PENDING,
    )
    created_by = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name="permits",
        verbose_name="申请人",
    )
    created_at = models.DateTimeField("创建时间", auto_now_add=True)

    class Meta:
        ordering = ["-created_at"]
        verbose_name = "许可证申请"
        verbose_name_plural = "许可证申请"

    def __str__(self):
        return f"{self.title} ({self.get_status_display()})"

这个模型背后的关系非常清楚:

text
User(工作人员 / 市民)
  1
  │
  └─── N Permit(许可证申请)

Model 这一层,初学时要先抓住四件事:

  • 字段类型决定存什么
  • 关系字段决定谁和谁有关联
  • Meta 决定默认行为
  • 模型方法可以放一部分领域规则

但别走到另一个极端:把所有业务都塞进 Model。更稳的理解是:

Model 是档案制度与数据结构的中心,不是整座城区所有逻辑的黑洞。