如果说 View 是窗口,Model 就是档案制度。
不是只有“数据库表”这么简单,而是:
- 数据字段长什么样
- 字段间关系是什么
- 默认排序是什么
- 一条记录如何被人类识别
我们给许可证处建一个模型:
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()})"这个模型背后的关系非常清楚:
User(工作人员 / 市民)
1
│
└─── N Permit(许可证申请)Model 这一层,初学时要先抓住四件事:
- 字段类型决定存什么
- 关系字段决定谁和谁有关联
Meta决定默认行为- 模型方法可以放一部分领域规则
但别走到另一个极端:把所有业务都塞进 Model。更稳的理解是:
Model 是档案制度与数据结构的中心,不是整座城区所有逻辑的黑洞。