记得我刚学Django那会儿,最迷惑的就是这个“模型”到底是个啥玩意儿。官方文档说得玄乎其玄,什么“单一的信息源”、“数据的权威真相”,听着就跟某种神秘宗教似的。
直到我接手了一个朋友的小型社区图书馆项目——那时候他们还在用Excel表格记录图书信息,每次有人借书都得手动查找、标记,经常出现“书在架上却显示已借出”的灵异事件。
我才恍然大悟:Django模型其实就是给你的数据设计一张智能Excel表格,只不过这张表格会自动帮你处理所有繁琐操作——借书、还书、查询,一键搞定!
一、模型设计:别急着写代码,先拿出纸笔!
很多新手一上来就噼里啪啦敲代码,这是最大的误区。在设计图书管理系统前,咱们得先搞清楚最基本的问题:图书馆里到底有哪些“东西”?
经过和图书馆管理员的深入交流(其实就是请她喝了杯奶茶),我梳理出了核心的四个实体:
- 图书本身:总得知道有什么书吧?
- 图书副本:《三体》可能有多本,得区分具体是哪一本被借走了
- 作者:一本书可能有多个作者,一个作者可能写多本书
- 借阅者:谁借了书,总不能凭记忆吧?
看到这里你可能要问:为什么不直接把作者信息放在图书表里?问得好!想象一下如果一本书有三个作者,你在Excel里会怎么做?可能会在“作者”列里写“刘慈欣、宝树、张某某”,然后想找所有刘慈欣的书时,就得在Excel里用筛选功能慢慢找。
这就是典型的关系型数据库设计思维vsExcel思维的差别!
二、实战开始:手把手创建Django模型
好了,理论说再多不如实际动手。让我们创建一个全新的Django项目(我给它起了个霸气的名字:SuperLibrary)。
django-admin startproject SuperLibrary
cd SuperLibrary
python manage.py startapp books
接下来就是重头戏——模型设计。打开books/models.py,咱们开始造轮子!
1. 作者模型(Author):从简单开始
from django.db import models
from django.urls import reverse
class Author(models.Model):
"""作者模型 - 记录作者信息"""
name = models.CharField("姓名", max_length=100)
bio = models.TextField("简介", blank=True, help_text="作者的生平简介")
birth_date = models.DateField("出生日期", null=True, blank=True)
email = models.EmailField("联系邮箱", blank=True)
class Meta:
db_table = 'library_authors' # 自定义数据库表名
verbose_name = '作者'
verbose_name_plural = '作者列表'
ordering = ['name'] # 默认按姓名排序
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('author_detail', kwargs={'pk': self.pk})
知识点爆笑解析:
CharField就是VIP版的varchar,max_length是它的底线——不能超!TextField像是个宽容的老妈子,你爱写多少写多少null=True和blank=True的区别:null是“数据库里可以为空”,blank是“表单里可以不填”。就像你可以没有女朋友(null=True),但

最低0.47元/天 解锁文章
1204

被折叠的 条评论
为什么被折叠?



