August Rush

一个还在努力成长的小火汁!

游龙当归海,海不迎我自来也。

We create our own demons.

You can reach me at augustrush0923@gmail.com
自定义Django Admin配置对象
发布:2020年08月22日 | 作者:augustrush | 阅读量: 753

自定义DjangoAdmin配置对象

通过 list_display列表,自定制显示数据库中已有列

from django.contrib import admin

from . import models


class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段


admin.site.register(models.UserInfo, UserInfoAdmin)
admin.site.register(models.UserGroup)



通过装饰器的方式自定义配置类

@admin.register(models.UserInfo)  #使用装饰器的方法,注册表到admin
class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段

# admin.site.register(models.UserInfo,UserInfoAdmin) #支持表名使用[models.UserInfo,models.Group],共同使用UserInfoAdmin配置,一般不常用
admin.site.register(models.UserGroup)



通过 list_display列表,自定制显示的列(数据库中没有的字段)

from django.contrib import admin
from . import models
from django.utils.safestring import mark_safe

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','xx',]  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    def xx(self,obj):  #obj =当前行的对象
        # return '自定义列'+obj.name
        tpl=mark_safe('<a href="http://news.baidu.com/?tn=news/">链接</a>'.format(obj.pk))
        return tpl

admin.site.register(models.UserInfo,UserInfoAdmin)
admin.site.register(models.UserGroup)



from django.contrib import admin
from . import models
from django.utils.safestring import mark_safe

# @admin.register(models.UserInfo)  #使用装饰器的方法,注册表到admin
class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','xx',]  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    list_display_links = ['name','nickname']  #定制可以跳转的字段
    def xx(self,obj):  #obj =当前行的对象
        # return '自定义列'+obj.name
        tpl=mark_safe('<a href="http://news.baidu.com/?tn=news/">链接</a>'.format(obj.pk))
        return tpl

admin.site.register(models.UserInfo,UserInfoAdmin) #支持表名使用[models.UserInfo,models.Group],共同使用UserInfoAdmin配置,一般不常用
admin.site.register(models.UserGroup)



list_filter = ['group'] 定制右侧筛选条件

from django.contrib import admin
from . import models
from django.utils.safestring import mark_safe

# @admin.register(models.UserInfo)  #使用装饰器的方法,注册表到admin
class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname',]  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    list_display_links = ['name','nickname',]  #定制可以跳转的字段
    list_filter = ['group','name']              #定制右侧筛选条件
    # def xx(self,obj):  #obj =当前行的对象
    #     # return '自定义列'+obj.name
    #     tpl=mark_safe('<a href="http://news.baidu.com/?tn=news/">链接</a>'.format(obj.pk))
    #     return tpl

admin.site.register(models.UserInfo,UserInfoAdmin) #支持表名使用[models.UserInfo,models.Group],共同使用UserInfoAdmin配置,一般不常用
admin.site.register(models.UserGroup)



自定制筛选分组 和页面数据筛选条件

from django.contrib import admin
from . import models
from django.utils.translation import ugettext_lazy as _
from django.utils.safestring import mark_safe

# @admin.register(models.UserInfo)  #使用装饰器的方法,注册表到admin
class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    # list_display_links = ['name','nickname',]  #定制可以跳转的字段

   #自定制 分组 和筛选的条件
    class Ugg(admin.SimpleListFilter):
        title = _('圣诞快乐的解决')
        parameter_name = 'xxxxxx' #点击组名 a标签携带的值,执行queryset方法

        def lookups(self, request, model_admin):
            """
            显示筛选选项
            :param request:
            :param model_admin:
            :return:
            """
            return models.UserGroup.objects.values_list('id','title')

        def queryset(self, request, queryset):
            """
            点击筛选查询时候,筛选用户表符合筛选条件的内容
            """
            v = self.value()
            if v:
                return queryset.filter(group_id=v)
            else:
                return queryset    # print(queryset)   #查询userinfo表的全部数据


    list_filter = ['group',Ugg]      #定制右侧筛选条件,通用场景把组里所有的人列出来
    # def xx(self,obj):  #obj =当前行的对象
    #     # return '自定义列'+obj.name
    #     tpl=mark_safe('<a href="http://news.baidu.com/?tn=news/">链接</a>'.format(obj.pk))
    #     return tpl

admin.site.register(models.UserInfo,UserInfoAdmin) #支持表名使用[models.UserInfo,models.Group],共同使用UserInfoAdmin配置,一般不常用
admin.site.register(models.UserGroup)





分页相关

list_per_page = 1  #一页显示数据库中多少条数据
list_max_show_all = 200 #最大显示行数
paginator = Paginator



list_editable = ['nickname', ]进入编辑模式

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_editable = ['nickname', ] #进入编辑模式
    list_display = ['name','nickname','group']



search_fields = ('name',) #根据字段,做模糊搜索功能

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    search_fields = ('name',)
    list_display = ['name','nickname','group']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段



fields,详细页面时,显示字段的字段

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group','ctime']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    fields = ['name','nickname']  #定义显示页面,显示的字段



exclude = ['name'] 配置显示页面,不显示的字段

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group','ctime']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    exclude = ['name']  #定义显示页面,不显示的字段

readonly_fields = ['name'] 配置显示页面,某字段只读不允许修改

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group','ctime']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    readonly_fields = ['name']

fieldsets,详细页面时,使用fieldsets标签对数据进行分割显示

@admin.register(models.UserInfo)
class UserInfoAdmin(admin.ModelAdmin):
    fieldsets = (
        ('基本数据', {
            'fields': ('user', 'pwd', 'ctime',)
        }),
        ('其他', {
            'classes': ('collapse', 'wide', 'extrapretty'),  # 'collapse','wide', 'extrapretty'
            'fields': ('user', 'pwd'),
        }),
    )



详细页面时,M2M显示时,数据移动选择(方向:上下和左右)

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group','ctime']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    filter_vertical = ("roles",) #选中多对多字段时,上下显示
    filter_horizontal=('roles') #选中多对多字段时,左右显示



ordering = ('-id',) 数据排序规则

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group','ctime']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    # ordering = ('id',)   #按id大小 排序显示
    ordering = ('-id',)#倒序显示



view_on_site,编辑页面,显示view on set按钮,可以设置 跳转会显示页面

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group','ctime']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段

    def view_on_site(self, obj):
        return 'https://www.baidu.com'



radio_fields,详细页面时,使用radio显示选项(FK默认使用select)

radio_fields = {"ug": admin.VERTICAL} # 或admin.HORIZONTAL



show_full_result_count = True,列表时,模糊搜索后面显示的数据个数样式

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group','ctime']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    search_fields = ('user',)
    show_full_result_count = True  # 1 result (12 total)



formfield_overrides = {},详细页面时,指定现实插件



prepopulated_fields = {},同步填充input框中的数据

class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group','ctime']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    prepopulated_fields = {"email": ("name", "nickname",)}



form = ModelForm,自定义 表单验证组件

from django.contrib import admin
from django.core.paginator import Paginator
from . import models
from django.utils.translation import ugettext_lazy as _
from django.utils.safestring import mark_safe
from django.forms import ModelForm
from django.forms import fields

class MyForm(ModelForm):
    others = fields.CharField()

    class Meta:
        model = models = models.UserInfo
        fields = "__all__"
        error_messages = {'name': {'required': '用户不能为空'}}


# @admin.register(models.UserInfo)  #使用装饰器的方法,注册表到admin
class UserInfoAdmin(admin.ModelAdmin): #必须继承admin.ModelAdmin基础配置类
    list_display = ['name','nickname','group','ctime']  #列表中 包含数据库中哪个字段,就在DjangoAdmin页面显示哪个字段
    form = MyForm



empty_value_display = "列数据为空时,设置显示默认值"

@admin.register(models.UserInfo)
class UserInfoAdmin(admin.ModelAdmin):
    empty_value_display = "列数据为空时,默认显示"

    list_display = ('user','pwd','up')

    def up(self,obj):
        return obj.user
    up.empty_value_display = "指定列数据为空时,默认显示"


  • 标签云

  • 支付宝扫码支持一下

  • 微信扫码支持一下



基于Nginx+Supervisord+uWSGI+Django1.11.1+Python3.6.5构建

版权所有 © 2020-2021 August Rush

京ICP备20007446号-1 & 豫公网安备 41100202000460号

网站地图 & RSS | Feed