Django - 定制后台和修改模型

定制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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值