Django Admin

前言

Django Admin是Django 提供了基于 web 的管理工具,是 django.contrib 的一部分


一、Django Admin配置代码

在项目的settings.py中的INSTALLED_APPS部分

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TestModel', # 确保这里的名称与 apps.py 中的 name 属性一致(这部分不是Django Admin)
]

二、使用步骤

访问地址http://127.0.0.1:8000/admin
在这里插入图片描述
这个时候我们后台还没有用户,无法正常登陆,可以通过命令python manage.py createsuperuser来创建超级用户
在这里插入图片描述
在这里插入图片描述

三、使用后台管理Test模型

修改 TestModel/admin.py

from django.contrib import admin

# Register your models here.
from TestModel.models import Test

admin.site.register(Test)

刷新后台可以看到
在这里插入图片描述

三、为Test模型生成关联模型

在TestModel下面的models.py中修改(增加一个文章和评论的表)

from django.db import models

# Create your models here.
class Test(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    age = models.IntegerField()

    #自动管理的日期时间,auto_now_add=True 表示在创建对象时自动设置为当前时间
    created_at = models.DateTimeField(auto_now_add=True)
    # auto_now=True 表示每次保存对象时自动更新为当前时间 
    updated_at = models.DateTimeField(auto_now=True)

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    # 外键 author 指向 Test 模型,ForeignKey 定义了一对多关系,即一个作者可以有多篇文章
    # on_delete=models.CASCADE 表示删除作者时同时删除其所有文章,当与之关联的 Test 对象被删除时,与之相关的 Article 对象也会被删除
    author = models.ForeignKey(Test, on_delete=models.CASCADE)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
        # __str__ 方法现在返回一个格式化的字符串,其中包含作者的姓名(self.author.name)和文章的标题(self.title)
        return f"Article by {self.author.name}: {self.title}"

class Comment(models.Model):
    content = models.TextField()
    article = models.ForeignKey(Article, on_delete=models.CASCADE)
    author = models.ForeignKey(Test, on_delete=models.CASCADE)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.content

然后依次执行命令行

# 如果字段变更提示确认ok就直接输入y
python manage.py makemigrations # 模型变更
python manage.py migrate # 创建表结构

刷新数据库可以看到
在这里插入图片描述

在前面改的admin.py里面把新加的模型也加入管理

from django.contrib import admin

# Register your models here.
from TestModel.models import Test, Article, Comment

admin.site.register([Test, Article, Comment])

刷新页面
在这里插入图片描述
可以自定义管理页面字段来取代默认页面字段显示,比如在add页面,我们想只显示name和email部分,修改 TestModel/admin.py

from django.contrib import admin

# Register your models here.
from TestModel.models import Test, Article, Comment

class TestAdmin(admin.ModelAdmin):
    fields = ('name', 'email')

admin.site.register(Test, TestAdmin)
admin.site.register(Article)
admin.site.register(Comment)

新增数据后列表显示
在这里插入图片描述
我们再修改一下admin.py

from django.contrib import admin

# Register your models here.
from TestModel.models import Test, Article, Comment

class TestAdmin(admin.ModelAdmin):
    fields = ('name', 'email', 'age')
    list_display = ('name','age', 'email') # list

admin.site.register(Test, TestAdmin)
admin.site.register(Article)
admin.site.register(Comment)

刷新页面后
在这里插入图片描述

给name增加搜索功能,再修改admin.py

from django.contrib import admin

# Register your models here.
from TestModel.models import Test, Article, Comment

class TestAdmin(admin.ModelAdmin):
    fields = ('name', 'email', 'age')
    list_display = ('name','age', 'email') # list
    search_fields = ('name',)

admin.site.register(Test, TestAdmin)
admin.site.register(Article)
admin.site.register(Comment)

在这里插入图片描述
在文章新增的时候我们发现author是这样的
在这里插入图片描述
我们可以修改下列文件来显示test模型的name
修改models.py

class Test(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    age = models.IntegerField()

    #自动管理的日期时间,auto_now_add=True 表示在创建对象时自动设置为当前时间
    created_at = models.DateTimeField(auto_now_add=True)
    # auto_now=True 表示每次保存对象时自动更新为当前时间 
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return self.name  # 返回 Test 模型的 name 字段值作为字符串表示

在这里插入图片描述
优化一下这个下拉框
修改admin.py

from django.contrib import admin

# Register your models here.
from TestModel.models import Test, Article, Comment

class TestAdmin(admin.ModelAdmin):
    fields = ('name', 'email', 'age')
    list_display = ('name','age', 'email') # list
    search_fields = ('name',)

class ArticleAdmin(admin.ModelAdmin):
    fields = ('title', 'content', 'author')
    list_display = ('title', 'author') # list
    search_fields = ('title',)
    autocomplete_fields = ['author']  # 使用 autocomplete_fields 来展示外键关联

admin.site.register(Test, TestAdmin)
admin.site.register(Article, ArticleAdmin)
admin.site.register(Comment)

再刷新页面
在这里插入图片描述


TestModel是我们创建的一个目录,不要理解为就是test模型,里面可以包含多个模型,可以把这部分理解成一个模块或者一整个项目都行,我们在生成数据表的时候也会以testmodel_作为表前缀

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值