Django Admin的相关知识

Django Admin的相关知识,第1张

概述Django Admin的相关知识 一、面向对象复习 1、类的继承 class Base(object): def __init__(self,val): self.val = val def func(self): self.test() print(self.val) def test(self): p Django Admin的相关知识

一、面向对象复习

1、类的继承

class Base(object):    def __init__(self,val):        self.val = val    def func(self):        self.test()        print(self.val)    def test(self):        print("Base.test")class Foo(Base):    def test(self):        print("FOO.test")    # def func(self):    #     print(self.val,666)    #有就执行自己的,没有就执行父类的class bar(object):    def __init__(self):        self._register = {}    def regiter(self,a,b=None):        if not b:            b=Base        self._register[a] = b(a)  #函数,类,对象obj = bar()  #实例化就会去执行它自己的__init__方法,并获取到一个对象b,b就可以调用里面的属性和方法了obj.regiter(1,Foo)obj.regiter(2)print(obj._register)  #{1: <__main__.Foo object at 0x0000000002213160>,2: <__main__.Base object at 0x0000000002213198>}#obj._register[1] == Foo(1)obj._register[1].func()  #Foo的对象  打印结果:FOO.test       1obj._register[2].func()  #Base的对象  打印结果:Base.test     2

2、单例模式:单例模式是一个设计模式(说白了就是单个实例公用一个对象)

举例一:

s1.py

class Foo(object):    def test(self):        print("123")v = Foo()#v是Foo的实例

s2.py

from s1 import v as v1print(v1,ID(v1))  #<s1.Foo object at 0x0000000002221710> 35788560from s1 import v as v2print(v1,ID(v2))   #<s1.Foo object at 0x0000000002221710> 35788560# 两个的内存地址是一样的# 文件加载的时候,第一次导入后,再次导入时不会再重新加载。

举例二:

class Singleton:    def __new__(cls,*args,**kw):        ‘‘‘__new__是一个构造方法,self就是他构造的‘‘‘        if not hasattr(cls,_instance):            orig = super(Singleton,cls)            cls._instance = orig.__new__(cls,**kw)        return cls._instanceone = Singleton()two = Singleton()print(one,two)   #他们两个的地址一样# print(ID(one),ID(two))one.name = alexprint(two.name)

二、django-admin的简单回顾

1、admin

  a:models.py

     - 创建表

  b:admin.py

    - 注册表    admin.site.register(models.UserInfo)

  c:urls.py 

   - url(r‘^admin/‘,admin.site.urls),

  PS: 

    1、动态生成url

    2、注册和生成url使用的都是admin.site

2、路由系统 

一个路径对应一个视图

url(r^index/$,vIEws.index,name="n1"),
url(r^index/(\d+)$,name="n2"),url(r^blog/,include(blog.urls))

有name的说明是反向解析,两种方式

代码中:
  reverse(‘n1‘)
  reverse(‘n2‘,args=(666,))

模板中:
  {% url ‘n1‘ %}
  {% url ‘n2‘ 666 %}

3、文件加载
  第一次导入后,再次导入时不再重新加载

4、面向对象

  - 封装

  - 继承

示例:

 1 class Base(object): 2     def __init__(self,val): 3         self.val = val 4  5     def func(self): 6         self.test() 7         print(self.val) 8  9     def test(self):10         print("Base.test")11 12 class Foo(Base):13     def test(self):14         print("FOO.test")15 16     # def func(self):17     #     print(self.val,666)18     #有就执行自己的,没有就执行父类的19 class bar(object):20     def __init__(self):21         self._register = {}22 23     def regiter(self,b=None):24         if not b:25             b=Base26         self._register[a] = b(a)  #函数,类,对象27 28 obj = bar()  #实例化就会去执行它自己的__init__方法,并获取到一个对象b,b就可以调用里面的属性和方法了29 obj.regiter(1,Foo)30 obj.regiter(2)31 print(obj._register)  #{1: <__main__.Foo object at 0x0000000002213160>,2: <__main__.Base object at 0x0000000002213198>}32 #obj._register[1] == Foo(1)33 obj._register[1].func()  #Foo的对象  打印结果:FOO.test       134 obj._register[2].func()  #Base的对象  打印结果:Base.test     2
VIEw Code

三、具体来说django  -admin的用法

首先需要发现的,当我们创建登录admin的时候,里面会有增删改查,不仅仅是这些功能,我们可以通过以下的方式设置一些样式

1、admin路由规则:

/admin/app01/role/           查看角色列表/admin/app01/role/add/       添加角色/admin/app01/role/2/change/  编辑/admin/app01/role/2/delete/  删除                        /admin/app01/userinfo/           /admin/应用名/表名/admin/app01/userinfo/add/       /admin/应用名/表名/功能名
/admin/app01/userinfo/1/change/ /admin/app01/userinfo/1/delete/

 

2、如何使用之具体 *** 作:http://www.cnblogs.com/wupeiqi/articles/7444717.HTML

3、原理:

    - 路由关系

    - 对应视图函数

admin的使用

自定制admin

首先创建表:

 1 from django.db import models 2 class UserInfo(models.Model): 3     name = models.CharFIEld(max_length=32,verbose_name="用户名") 4     email = models.EmailFIEld(max_length=32,verbose_name="邮箱") 5     ut = models.ForeignKey(to="UserType",verbose_name="所属类型") 6  7  8 class UserType(models.Model): 9     caption = models.CharFIEld(max_length=32,verbose_name="用户类型名称")10     roles = models.ManyToManyFIEld(to="Role",verbose_name="所属角色")11 12 class Role(models.Model):13     name = models.CharFIEld(max_length=32,verbose_name="角色名")
models.py

 

1、在admin.py中只需要讲Mode中的某个类注册,即可在admin中实现增删改查的功能,如:

admin.site.register(models.UserInfo)
admin.site.register(models.Role)
admin.site.register(models.UserType)

2、创建超级用户,刚登录上的时候

3、我们要把我们自己的表名改成中文的和吧对象变成中文的:

   class Meta:        verbose_name_plural = "用户表"            def __str__(self):        return self.name

但是,这种方式比较简单,如果想要进行更多的定制 *** 作,需要利用Modeladmin进行 *** 作,如:

方式一:    class Useradmin(admin.Modeladmin):        List_display = (user,pwd,)     admin.site.register(models.UserInfo,Useradmin) # 第一个参数可以是列表      方式二:    @admin.register(models.UserInfo)                # 第一个参数可以是列表    class Useradmin(admin.Modeladmin):        List_display = (user,pwd,)

 Modeladmin中提供了大量的可定制功能,如

1. List_display,列表时,定制显示的列。

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    List_display = (user,xxxxx)     def xxxxx(self,obj):        return "xxxxx"
    #或者
     return obj.name +"最漂亮"

2. List_display_links,列表时,定制列可以点击跳转。

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    List_display = (user,xxxxx)    List_display_links = (pwd,)

3. List_filter,列表时,定制右侧快速筛选。

from django.utils.translation import ugettext_lazy as _ @admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    List_display = (user,pwd)     class Ugg(admin.SimpleListFilter):        Title = _(decade born)        parameter_name = xxxxxx         def lookups(self,request,model_admin):            """            显示筛选选项            :param request:            :param model_admin:            :return:            """            return models.UserGroup.objects.values_List(ID,Title)         def queryset(self,queryset):            """            点击查询时,进行筛选            :param request:            :param queryset:            :return:            """            v = self.value()            return queryset.filter(ug=v)     List_filter = (user,Ugg,)

 

 

4、search_fIEld:添加搜索框

5、action,列表时,定制action中的 *** 作

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):     # 定制Action行为具体方法    def func(self,queryset):        print(self,queryset)        print(request.POST.getList(_selected_action))     func.short_description = "中文显示自定义Actions"    actions = [func,]     # Action选项都是在页面上方显示    actions_on_top = True    # Action选项都是在页面下方显示    actions_on_bottom = False     # 是否显示选择个数    actions_selection_counter = True

 

5、 List_select_related,列表时,连表查询是否自动select_related

6. 分页相关

# 分页,每页显示条数    List_per_page = 100 # 分页,显示全部(真实数据<该值时,才会有显示全部)    List_max_show_all = 200 # 分页插件    paginator = Paginator

 

7、 List_editable,列表时,可以编辑的列

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    List_display = (user,ug,)    List_editable = (ug,)

 

8、search_fIElds,列表时,模糊搜索的功能

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):         search_fIElds = (user,pwd)

 

9、date_hIErarchy,列表时,对Date和DateTime类型进行搜索

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):     date_hIErarchy = ctime

 

10、preserve_filters,详细页面,删除、修改,更新后跳转回列表后,是否保留原搜索条件

11、save_as = False,详细页面,按钮为“Sava as new” 或 “Sava and add another”

save_as_continue = True # 如果 save_as=True,save_as_continue = True, 点击Sava as new 按钮后继续编辑。# 如果 save_as=True,save_as_continue = False,点击Sava as new 按钮后返回列表。 New in Django 1.10.

 

12、save_on_top = False,详细页面,在页面上方是否也显示保存删除等按钮

13、inlines,详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除

class UserInfoInline(admin.StackedInline): # TabularInline    extra = 0    model = models.UserInfo  class GroupadminMode(admin.Modeladmin):    List_display = (ID,Title,)    inlines = [UserInfoInline,]

 

14、定制HTML模板

add_form_template = Nonechange_form_template = Nonechange_List_template = Nonedelete_confirmation_template = Nonedelete_selected_confirmation_template = Noneobject_history_template = None

 

15、raw_ID_fIElds,详细页面,针对FK和M2M字段变成以input框形式

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):     raw_ID_fIElds = (FK字段,M2M字段,)

 

16、 fIElds,详细页面时,显示字段的字段

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    fIElds = (user,)

 

18. exclude,详细页面时,排除的字段

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    exclude = (user,)

 

19. Readonly_fIElds,详细页面时,只读字段

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    Readonly_fIElds = (user,)

 

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

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    fIEldsets = (        (基本数据,{            fIElds: (user,ctime,)        }),(其他,{            classes: (collapse,wIDe,extrapretty),# ‘collapse‘,‘wIDe‘,‘extrapretty‘            fIElds: (user,pwd),}),)

 

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

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    filter_vertical = ("m2m字段",) # 或filter_horizontal = ("m2m字段",)

 

22. ordering,列表时,数据排序规则

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    ordering = (-ID,)    或    def get_ordering(self,request):        return [-ID,]

 

23. vIEw_on_site,编辑时,是否在页面上显示vIEw on set

vIEw_on_site = False或def vIEw_on_site(self,obj):    return https://www.baIDu.com

 

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

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

 

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

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    # show_full_result_count = True # 1 result (12 total)    # show_full_result_count = False  # 1 result (Show all)    search_fIElds = (user,)

 

26. formfIEld_overrIDes = {},详细页面时,指定现实插件

from django.forms import Widgetsfrom django.utils.HTML import format_HTML class MyTextarea(Widgets.Widget):    def __init__(self,attrs=None):        # Use slightly better defaults than HTML‘s 20x2 Box        default_attrs = {cols: 40,rows: 10}        if attrs:            default_attrs.update(attrs)        super(MyTextarea,self).__init__(default_attrs)     def render(self,name,value,attrs=None):        if value is None:            value = ‘‘        final_attrs = self.build_attrs(attrs,name=name)        return format_HTML(<textarea {}>\r\n{}</textarea>,final_attrs,value)   @admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):     formfIEld_overrIDes = {        models.models.CharFIEld: {Widget: MyTextarea},}

 

27. prepopulated_fIElds = {},添加页面,当在某字段填入值后,自动会将值填充到指定字段。

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):     prepopulated_fIElds = {"email": ("user","pwd",)}

 

PS: Djangoadmin中使用Js实现功能,页面email字段的值会在输入:user、pwd时自动填充

28. form = ModelForm,用于定制用户请求时候表单验证

from app01 import modelsfrom django.forms import ModelFormfrom django.forms import fIElds  class MyForm(ModelForm):    others = fIElds.CharFIEld()     class Meta:        model = models = models.UserInfo        fIElds = "__all__" @admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):     form = MyForm

 

29. empty_value_display = "列数据为空时,显示默认值"

@admin.register(models.UserInfo)class Useradmin(admin.Modeladmin):    empty_value_display = "列数据为空时,默认显示"     List_display = (user,up)     def up(self,obj):        return obj.user    up.empty_value_display = "指定列数据为空时,默认显示"

 

简单测试admin示例

admin.py 总结

以上是内存溢出为你收集整理的Django Admin的相关知识全部内容,希望文章能够帮你解决Django Admin的相关知识所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1190799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存