05定制后台和修改模型

技术交流QQ群:1027579432,欢迎你的加入!

本教程来源于B站杨仕航Django2.0开发视频教程,如需转载,必须注明来源!
1.定制admin后台
  • admin后台定制有两个地方需要设置:
    • 设置模型__str__
    • 定制admin
  • 打开article文件下的模型文件models.py,添加__str()__这个方法,如下所示:
    def __str__(self):
            return "<Article: %s>" % self.title
    

修改后的结果.png

  • 进一步对admin后台进行定制,打开mysite文件夹下的admin.py文件,添加如下内容:
    class ArticleAdmin(admin.ModelAdmin):
        list_display = ("id", "title", "content")
        ordering = ("id",)  # 添加-表示依据id字段倒序排列文章
    
        # 注册模型
    admin.site.register(Article, ArticleAdmin)
    
  • 使用另一种方法对admin后台进行定制,打开mysite文件夹下的admin.py文件,添加如下内容:
    @admin.register(Article)
    class ArticleAdmin(admin.ModelAdmin):
        list_display = ("id", "title", "content")
        ordering = ("id",)  # 添加-表示依据id字段倒序排列文章
    
2.修改模型
  • 修改模型需要更新数据库,执行以下两条命令:
    • python manage.py makemigrations
    • python manage.py migrate
  • 修改模型前,建议先备份数据库db.sqlite3文件。打开article文件夹下的models.py文件,添加如下内容:
    created_time = models.DateTimeField()  # 文章的创建日期
    
  • 打开article文件夹下的admin.py文件,在list_display变量中添加created_time字段,如下所示:
    list_display = ("id", "title", "content", "created_time")
    
  • 依次执行制造迁移和迁移命令:
    • python manage.py makemigrations,注意此处需要设置created_time的默认值,通常有三种方法可以设置默认值:
      • 第一种方法是在执行制造迁移命令后,输入1进入命令行模式下设置文章的创建时间,再输入timezone.now命令即可设置文章创建时间的命令。
      • 第二种方法是打开article文件夹下的models.py文件,添加如下内容:
        from django.utils import timezone
        created_time = models.DateTimeField(default=timezone.now)  # 文章的创建日期
        
      • 第三种方法是打开article文件夹下的models.py文件,添加如下内容:
        created_time = models.DateTimeField(auto_now_add=True)  # 文章的创建日期
        
    • python manage.py migrate
  • 打开article文件夹下的models.py文件,在当中增加文章上一次更新日期字段,如下所示:
    last_updated_time = models.DateTimeField(auto_now=True)  # 文章的更新时间
    
  • 打开article文件夹下的admin.py文件,在list_display变量中添加last_updated_time字段,如下所示:
    list_display = ("id", "title", "content", "created_time", "last_updated_time")
    
  • 注意:每次修改完模型文件models.py后,都必须执行制造迁移和迁移两个命令
  • 增加作者信息:打开article文件夹下的models.py文件,在当中增加作者信息auther字段,如下所示:
    from django.contrib.auth.models import User
    # 增加作者信息,一个作者可能对应多篇文章,因此在数据库中将作者设置为外键
        auther = models.ForeignKey(User, on_delete=models.DO_NOTHING, default=1)
    
  • 打开article文件夹下的admin.py文件,在list_display变量中添加auther字段,如下所示:
    list_display = ("id", "title", "auther", "content", "created_time",
                        "last_updated_time", )
    
  • 在增加作者信息时,auther字段由于粗心打错了拼写,需要手动将其改写为author。然后执行制造迁移和迁移命令,如下所示:
    E:\Django\mysite
    $ python manage.py makemigrations
    Did you rename article.auther to article.author (a ForeignKey)? [y/N] y
    Migrations for 'article':
      article\migrations\0005_auto_20200504_1042.py
        - Rename field auther on article to author
    
    E:\Django\mysite
    $ python manage.py migrate
    Operations to perform:
      Apply all migrations: admin, article, auth, contenttypes, sessions
    Running migrations:
      Applying article.0005_auto_20200504_1042... OK
    
  • 增加布尔型字段值和数值型字段,打开article文件夹下的models.py文件,在当中增加是否删除is_delete字段和阅读量readed_num字段,如下所示:
    # 是否删除,用于标记某条数据是否已经被删除
    is_deleted = models.BooleanField(default=False)
    # 阅读量
    readed_num = models.IntegerField(default=0)
    
  • 打开article文件夹下的admin.py文件,在list_display变量中添加is_deleted字段,如下所示:
    list_display = ("id", "title", "author", "is_deleted", "content", "created_time",
                        "last_updated_time", )
    
  • 打开article文件夹下的views.py文件,在当中修改代码article=Article.objects.all()成如下所示。因此,当删除某篇文章时,打开localhost:8000/article/前端页面就会自动进行更新。
articles = Article.objects.filter(is_deleted=False)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值