技术交流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)