admin后台管理
django给你提供了一个可视化的界面用来让你方便的对你的模型表
进行数据的增删改查操作
如果你先想要使用amdin后台管理操作模型表
你需要先注册你的模型表告诉admin你需要操作哪些表
去你的应用下的admin.py中注册你的模型表
admin.py注册需要管理操作的模型表
from django.contrib import admin
from app01 import models
# Register your models here.
admin.site.register(models.UserInfo) # 注册的表名会默认加个后缀s,如果想自定义可以在models.py中在类中定义一个Meta类,见下面
admin.site.register(models.Blog)
admin.site.register(models.Category)
admin.site.register(models.Tag)
admin.site.register(models.Article)
admin.site.register(models.Article2Tag)
admin.site.register(models.UpAndDown)
admin.site.register(models.Comment)
表名默认会加s后缀,可以在models.py中更改,如下:
from django.db import models
from django.contrib import auth
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
phone = models.BigIntegerField(null=True,verbose_name="手机号")
# 头像
avatar = models.FileField(upload_to="avatar/",default='avatar/default.png')
"""
给avatar字段传文件对象 该文件会自动存储到avatar文件夹 然后avatar字段只保存文件路径avatar/default.png
"""
create_time = models.DateTimeField(auto_now_add=True)
blog = models.OneToOneField(to='Blog',null=True)
class Meta:
verbose_name_plural = "用户表" # 修改admin后台管理默认的表名
# verbose_name = "用户表" # 使用verbose_name更改还是会加s ==> 用户表s
模型类中Meta的其他选项
https://blog.csdn.net/weixin_30394019/article/details/112162982
注意1:
# admin会给每一个注册了的模型表自动生成增删改查四条url
http://127.0.0.1:8000/admin/app01/userinfo/ 查
http://127.0.0.1:8000/admin/app01/userinfo/add/ 增
http://127.0.0.1:8000/admin/app01/userinfo/1/change/ 改
http://127.0.0.1:8000/admin/app01/userinfo/1/delete/ 删
http://127.0.0.1:8000/admin/app01/blog/ 查
http://127.0.0.1:8000/admin/app01/blog/add/ 增
http://127.0.0.1:8000/admin/app01/blog/1/change/ 改
http://127.0.0.1:8000/admin/app01/blog/1/delete/ 删
"""
关键点就在于urls.py中的第一条自带的url
前期我们需要自己手动苦逼的录入数据,自己克服一下
"""
注意2:虽然我们在models.py中的class模型类中设置了字段可以为空,但是admin后台管理不允许为空,如果要admin后台管理也可以为空需要给字段添加blank=True
from django.db import models
from django.contrib import auth
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserInfo(AbstractUser):
phone = models.BigIntegerField(null=True,blank=True,verbose_name="手机号")
"""
null=True 数据库该字段可以为空
blank=True admin后台管理该字段可以为空
"""
# 头像
avatar = models.FileField(upload_to="avatar/",default='avatar/default.png')
"""
给avatar字段传文件对象 该文件会自动存储到avatar文件夹 然后avatar字段只保存文件路径avatar/default.png
"""
create_time = models.DateTimeField(auto_now_add=True)
blog = models.OneToOneField(to='Blog',null=True)
class Meta:
verbose_name_plural = "用户表"
# verbose_name = "用户表" # 使用verbose_name更改还是会加s ==> 用户表s
def __str__(self):
return self.username
admin后管定制-显示字段
- models.py
from django.db import models
# Create your models here.
class BaseModel(models.Model):
is_delete = models.BooleanField(default=False)
# auto_now_add=True 只要记录创建,不需要手动插入时间,自动把当前时间插入
create_time = models.DateTimeField(auto_now_add=True)
# auto_now=True,只要更新,就会把当前时间插入
last_update_time = models.DateTimeField(auto_now=True)
# import datetime
# create_time=models.DateTimeField(default=datetime.datetime.now)
class Meta:
# 单个字段,有索引,有唯一
# 多个字段,有联合索引,联合唯一
abstract = True # 抽象表,不在数据库建立出表
class Book(BaseModel):
# verbose_name admin中显示中文
name = models.CharField(max_length=32, verbose_name='书名', help_text='这里填书名')
price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name='价格')
# 一对多的关系一旦确立,关联字段写在多的一方
# to_field 默认不写,关联到Publish主键
# db_constraint=False 逻辑上的关联,实质上没有外键练习,增删不会受外键影响,但是orm查询不影响
publish = models.ForeignKey(to='Publish', on_delete=models.DO_NOTHING, db_constraint=False, verbose_name='出版社')
# 多对多,跟作者,关联字段写在 查询次数多的一方
# 什么时候用自动,什么时候用手动?第三张表只有关联字段,用自动 第三张表有扩展字段,需要手动写
# 不能写on_delete
authors = models.ManyToManyField(to='Author', db_constraint=False, verbose_name='作者')
class Meta:
verbose_name_plural = '图书表' # admin中表名的显示
def __str__(self):
return self.name
@property
def publish_name(self):
return self.publish.name
# def author_list(self):
def author_list(self):
author_list = self.authors.all()
# ll=[]
# for author in author_list:
# ll.append({'name':author.name,'sex':author.get_sex_display()})
# return ll
return [{'name': author.name, 'sex': author.get_sex_display()} for author in author_list]
class Publish(BaseModel):
name = models.CharField(max_length=32, verbose_name='出版社名称')
addr = models.CharField(max_length=32, verbose_name='出版社地址')
class Meta:
verbose_name_plural = '出版社表'
def __str__(self):
return self.name
class Author(BaseModel):
name = models.CharField(max_length=32, verbose_name='作者名称')
sex = models.IntegerField(choices=((1, '男'), (2, '女')), verbose_name='性别')
# 一对一关系,写在查询频率高的一方
# OneToOneField本质就是ForeignKey+unique,自己手写也可以
authordetail = models.OneToOneField(to='AuthorDetail', db_constraint=False, on_delete=models.CASCADE, verbose_name='作者详情')
def __str__(self):
return self.name
class Meta:
verbose_name_plural = '作者表'
class AuthorDetail(BaseModel):
mobile = models.CharField(max_length=11, verbose_name='手机号')
class Meta:
verbose_name_plural = '作者详情表'
- admin.py
from django.contrib import admin
from api import models
# Underwriter admin model
class BookNamePublish(admin.ModelAdmin):
# 需要显示的字段信息
list_display = ('name', 'price', 'publish')
# 设置哪些字段可以点击进入编辑界面,默认是第一个字段
list_display_links = ('name', 'price')
# 注册时,在第二个参数写上 admin model
# Register your models here.
admin.site.register(models.Book, BookNamePublish) # 注册的表名会默认加个后缀s,如果想自定义可以在models.py中在类中定义一个Meta类,见下面
admin.site.register(models.Publish)
admin.site.register(models.Author)
admin.site.register(models.AuthorDetail)
效果:
文档更新时间: 2022-09-19 13:23 作者:李延召