前面只定义了title模型,也就是日记或博客的标题,还需要定义其内容,即:content模型。
1、首先在models.py里新增模型
# 定义另一个模型:CnbContent,这个模型和CnbTitle关联,一个是标题,一个是内容 class CnbContent(models.Model): # title_relation属性表示这个CnbContent和哪个CnbTitle关联,并且通过on_delete规定,如果一方被删除了,另一方如何操作 title_relation = models.ForeignKey(CnbTitle, on_delete=models.CASCADE) text = models.TextField() date_add = models.DateTimeField(auto_now_add=True) def __str__(self): return self.text[:64] + ‘...‘
后续,我们测试了on_delete=models.CASCADE的删除关联性:
分别设置a,b,然后让b关联a,则删除b时,a不会被删除;但是删除a,则a和b都会被删除:
2、接着,我们到admin.py里进行注册
from django.contrib import admin from .models import CnbTitle, CnbContent # Register your models here. # 请注意:每个app都有自己的admin模块,但是一个工程只有一个admin页面 # 注册test_app下的models admin.site.register(CnbTitle) admin.site.register(CnbContent)
3、将新的模型,添加到数据库里
lzhshn@lzhshn-Ryzen:~/PycharmProjects/FreeNote$ python3 manage.py makemigrations
Migrations for ‘test_app‘:
test_app/migrations/0002_auto_20190817_0747.py
- Change Meta options on cnbtitle
- Create model CnbContent
lzhshn@lzhshn-Ryzen:~/PycharmProjects/FreeNote$ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, test_app
Running migrations:
Applying test_app.0002_auto_20190817_0747... OK
lzhshn@lzhshn-Ryzen:~/PycharmProjects/FreeNote$
4、注意,在本示例中,标题和内容是分别放在两个class里的。假设需要显示一个目录,其实只需要显示所有标题即可,则通过使用标题的集合会更方便。所以对之前定义的CnbTitle进行了改造:
# Create your models here. # 这个模型定义我在cnblogs里新建博文的标题,下含2个属性:文字内容,添加时间 # models是一个包,里面包括很多类,CnbTitle类继承于Model类,两个属性text和date分别是CharField类和DateTimeField类的对象 class CnbTitle(models.Model): text = models.CharField(max_length=128) date_add = models.DateTimeField(auto_now_add=True) # 如果要在某个地方区别地显示这个类的对象,使用如下方式 # 这里表示用类的text属性来指代某个具体的对象 def __str__(self): return self.text # 定义一个自己觉得舒服的集合名称,例如当建立一个目录时,这个集合非常重要 # 如果不定义,django会默认使用模型名+s来表示其集合 class Meta: verbose_name_plural = ‘all_CnbTitle‘
经过这样设置后,可以发现重新执行makemigrations和migrate时,会把后面追加的修改也包含进去。
原文:https://www.cnblogs.com/lzhshn/p/11369001.html