zoukankan      html  css  js  c++  java
  • 105-定义更多的模型,并使他们关联

    前面只定义了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
    
    

     经过这样设置后,可以发现重新执行makemigrations和migrate时,会把后面追加的修改也包含进去。

  • 相关阅读:
    【UOJ Round #3】
    【UOJ Round #1】
    【BZOJ】【3673】可持久化并查集 & 【3674】可持久化并查集加强版
    【ContestHunter】【弱省胡策】【Round7】
    【BZOJ】【3211】花神游历各国
    【BZOJ】【4146】 【AMPPZ2014】Divisors
    【BZOJ】【3931】【CQOI2015】网络吞吐量
    【BZOJ】【3697】采药人的路径&【3127】【USACO2013 Open】Yin and Yang
    【BZOJ】【3930】【CQOI2015】选数
    【ContestHunter】【弱省胡策】【Round6】
  • 原文地址:https://www.cnblogs.com/lzhshn/p/11369001.html
Copyright © 2011-2022 走看看