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
- python manage.py makemigrations,注意此处需要设置created_time的默认值,通常有三种方法可以设置默认值:
- 打开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)