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时,会把后面追加的修改也包含进去。

  • 相关阅读:
    SVN的安装和使用手册
    高德坐标/百度地图获取经纬度
    MVC中返回json数据的两种方式
    [译]Flutter JSON和序列化
    ios 网络字节顺序的转换HTOS
    [swift]可选类型
    向OC类中添加默认的协议实现(ProtocolKit)
    [swift] NSClassFromString 无法获得该类
    Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic
    iOS 9适配技巧
  • 原文地址:https://www.cnblogs.com/lzhshn/p/11369001.html
Copyright © 2011-2022 走看看