定制admin后台
Django管理后面数据库字段的显示
- 在模型文件里面添加一个__str__方法
models.py
from django.db import models
# Create your models here.
class Article(models.Model):
# 创建一个标题
# CharField代表它是一个文本型字符型的字段
# 字段对应数据库
# maxlength限制字段的最大长度
title = models.CharField(max_length=30)
# 创建一个内容
# Text表示这个是一个文本字段
content = models.TextField()
def __str__(self):
return "<article: %s>" % self.title
以列表形式在Django管理页面显示模型数据
admin.py
from django.contrib import admin
# 导入模型
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display= ("id", "title", "content")
# 按照字段正序排序
ordering = ("id",)
# 按照字段倒序排序
# ordering = ("-id",)
# Register your models here.
admin.site.register(Article, ArticleAdmin)
使用装饰器
admin.py
from django.contrib import admin
# 导入模型
from .models import Article
@ admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display= ("id", "title", "content")
# 按照字段正序排序
ordering = ("id",)
# 按照字段倒序排序
# ordering = ("-id",)
# Register your models here.
# admin.site.register(Article, ArticleAdmin)
修改模型
- 备份数据库
- 修改数据库模型文件, 添加字段
models.py
from django.db import models
# Create your models here.
class Article(models.Model):
# 创建一个标题
# CharField代表它是一个文本型字符型的字段
# 字段对应数据库
# maxlength限制字段的最大长度
title = models.CharField(max_length=30)
# 创建一个内容
# Text表示这个是一个文本字段
content = models.TextField()
# 创建时间 auto_now_add=True表示创建的时候自动添加当前时间
created_time = models.DateTimeField(auto_now_add=True)
# 最后一次修改时间
last_updated_time = models.DateTimeField(auto_now=True)
def __str__(self):
return "<article: %s>" % self.title
admin.py
from django.contrib import admin
# 导入模型
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display= ("id", "title", "content", "created_time", "last_updated_time")
# 按照字段正序排序
ordering = ("id",)
- 修改模型更新数据库
python manage.py makemigrations
python manage.py migrate
直接更新会报错, 因为没有给字段默认值
- 处理方法
- 直接输入字段默认值 : timezone.now
默认的时间有时间差, 需要修改全局设置中的TIME_ZONE字段参数为Asia/Shanghai设置时区为上海即可.
外键
可以使用django的用户模型. 导入django.contrib.auth.models 里面的 User
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Article(models.Model):
....
# 作者 on_delete=models.DO_NOTHING表示删除的时候不做任何操作
author = models.ForeignKey(User, on_delete=models.DO_NOTHING, default=1)
def __str__(self):
return "<article: %s>" % self.title
逻辑删除
删除数据的操作是有风险的, 添加一个是否删除的字段, 用来标记删除操作
- 添加一个is_delete字段
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Article(models.Model):
.......
# 是否删除
is_deleted = models.BooleanField(default=False)
def __str__(self):
return "<article: %s>" % self.title
- 使用过滤器筛选没有删除的字段
views.py
from django.shortcuts import render, get_object_or_404
# 应用模型
from .models import Article
..........
# 文章列表
def article_list(request):
# 筛选没有删除的字段
article = Article.objects.filter(is_deleted=False)
context = {}
context['articles'] = article
return render(request, "article_list.html", context)
数值类型
- 添加阅读数字段
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Article(models.Model):
....
readed_num = models.IntegerField(default=0)
def __str__(self):
return "<article: %s>" % self.title