加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Django内置Admin

发布时间:2020-12-15 17:20:21 所属栏目:大数据 来源:网络整理
导读:div id="post_detail" div id="topics" div class="post" p class="postTitle" div class="postBody" div id="cnblogs_post_body" class="blogpost-body" Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 模板的context_pr

<div id="post_detail">
<div id="topics">
<div class="post">
<p class="postTitle">


<div class="postBody">
<div id="cnblogs_post_body" class="blogpost-body">

Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有:

模板的context_processors: django.contrib.auth.context_processors.auth django.contrib.messages.context_processors.messages 中间件: django.contrib.auth.middleware.AuthenticationMiddleware django.contrib.messages.middleware.MessageMiddleware</span></pre>

一. 配置路由

当前配置的路由可以创建一些路由映射关系:









二. 定制Admin

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python plain">admin.site.register(models.UserInfo)

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python plain">方式一:


<div class="line number2 index1 alt1"><code class="python spaces">
<code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">list_display
<code class="python keyword">= <code class="python plain">(
<code class="python string">'user'<code class="python plain">,
<code class="python string">'pwd'<code class="python plain">,)

<div class="line number4 index3 alt1">

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python plain">admin.site.register(models.UserInfo,UserAdmin) <code class="python comments"># 第一个参数可以是列表

<div class="line number6 index5 alt1"><code class="python spaces">

<div class="line number7 index6 alt2">

<div class="line number8 index7 alt1"><code class="python plain">方式二:

<div class="line number9 index8 alt2"><code class="python spaces"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo) <code class="python comments"># 第一个参数可以是列表

<div class="line number10 index9 alt1"><code class="python spaces"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number11 index10 alt2"><code class="python spaces"><code class="python plain">list_display <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,)

</td>

</tr>

</table>

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

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">list_display <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,<code class="python string">'xxxxx'<code class="python plain">)

<div class="line number4 index3 alt1">

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python keyword">def <code class="python plain">xxxxx(<code class="python color1">self<code class="python plain">,obj):

<div class="line number6 index5 alt1"><code class="python spaces"><code class="python keyword">return <code class="python string">"xxxxx"

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">list_display <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,<code class="python string">'xxxxx'<code class="python plain">)

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python plain">list_display_links <code class="python keyword">= <code class="python plain">(<code class="python string">'pwd'<code class="python plain">,)

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python keyword">from <code class="python plain">django.utils.translation <code class="python keyword">import <code class="python plain">ugettextlazy as


<div class="line number2 index1 alt1">

<div class="line number3 index2 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)

<div class="line number4 index3 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python plain">listdisplay <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,<code class="python string">'pwd'<code class="python plain">)

<div class="line number6 index5 alt1">

<div class="line number7 index6 alt2"><code class="python spaces"><code class="python keyword">class <code class="python plain">Ugg(admin.SimpleListFilter):

<div class="line number8 index7 alt1"><code class="python spaces"><code class="python plain">title <code class="python keyword">= <code class="python plain">
(<code class="python string">'decade born'<code class="python plain">)

<div class="line number9 index8 alt2"><code class="python spaces"><code class="python plain">parameter_name <code class="python keyword">= <code class="python string">'xxxxxx'

<div class="line number10 index9 alt1">

<div class="line number11 index10 alt2"><code class="python spaces"><code class="python keyword">def <code class="python plain">lookups(<code class="python color1">self<code class="python plain">,request,model_admin):

<div class="line number12 index11 alt1"><code class="python spaces"><code class="python comments">"""

<div class="line number13 index12 alt2"><code class="python spaces"><code class="python comments">显示筛选选项

<div class="line number14 index13 alt1"><code class="python spaces"><code class="python comments">:param request:

<div class="line number15 index14 alt2"><code class="python spaces"><code class="python comments">:param model_admin:

<div class="line number16 index15 alt1"><code class="python spaces"><code class="python comments">:return:

<div class="line number17 index16 alt2"><code class="python spaces"><code class="python comments">"""

<div class="line number18 index17 alt1"><code class="python spaces"><code class="python keyword">return <code class="python plain">models.UserGroup.objects.values_list(<code class="python string">'id'<code class="python plain">,<code class="python string">'title'<code class="python plain">)

<div class="line number19 index18 alt2">

<div class="line number20 index19 alt1"><code class="python spaces"><code class="python keyword">def <code class="python plain">queryset(<code class="python color1">self<code class="python plain">,queryset):

<div class="line number21 index20 alt2"><code class="python spaces"><code class="python comments">"""

<div class="line number22 index21 alt1"><code class="python spaces"><code class="python comments">点击查询时,进行筛选

<div class="line number23 index22 alt2"><code class="python spaces"><code class="python comments">:param request:

<div class="line number24 index23 alt1"><code class="python spaces"><code class="python comments">:param queryset:

<div class="line number25 index24 alt2"><code class="python spaces"><code class="python comments">:return:

<div class="line number26 index25 alt1"><code class="python spaces"><code class="python comments">"""

<div class="line number27 index26 alt2"><code class="python spaces"><code class="python plain">v <code class="python keyword">= <code class="python color1">self<code class="python plain">.value()

<div class="line number28 index27 alt1"><code class="python spaces"><code class="python keyword">return <code class="python plain">queryset.<code class="python functions">filter<code class="python plain">(ug<code class="python keyword">=<code class="python plain">v)

<div class="line number29 index28 alt2">

<div class="line number30 index29 alt1"><code class="python spaces"><code class="python plain">list_filter <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,Ugg,)

</td>

</tr>

</table>

4.list_select_related,列表时,连表查询是否自动select_related

5. 分页相关

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python comments"># 分页,每页显示条数


<div class="line number2 index1 alt1"><code class="python spaces"><code class="python plain">list_per_page <code class="python keyword">= <code class="python value">100

<div class="line number3 index2 alt2">

<div class="line number4 index3 alt1"><code class="python comments"># 分页,显示全部(真实数据<该值时,才会有显示全部)

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python plain">list_max_show_all <code class="python keyword">= <code class="python value">200

<div class="line number6 index5 alt1">

<div class="line number7 index6 alt2"><code class="python comments"># 分页插件

<div class="line number8 index7 alt1"><code class="python spaces"><code class="python plain">paginator <code class="python keyword">= <code class="python plain">Paginator

</td>

</tr>

</table>

6. list_editable,列表时,可以编辑的列

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">list_display <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,<code class="python string">'ug'<code class="python plain">,)

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python plain">list_editable <code class="python keyword">= <code class="python plain">(<code class="python string">'ug'<code class="python plain">,)

</td>

</tr>

</table>

7.search_fields,列表时,模糊搜索的功能

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces">

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python plain">search_fields <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,<code class="python string">'pwd'<code class="python plain">)

</td>

</tr>

</table>

8.date_hierarchy,列表时,对Date和DateTime类型进行搜索

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2">

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python plain">date_hierarchy <code class="python keyword">= <code class="python string">'ctime'

</td>

</tr>

</table>

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

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

11.save_as_continue = True,点击保存并继续编辑

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python plain">save_as_continue <code class="python keyword">= <code class="python color1">True


<div class="line number2 index1 alt1">

<div class="line number3 index2 alt2"><code class="python comments"># 如果 save_as=True,save_as_continue = True, 点击Sava as new 按钮后继续编辑。

<div class="line number4 index3 alt1"><code class="python comments"># 如果 save_as=True,save_as_continue = False,点击Sava as new 按钮后返回列表。

<div class="line number5 index4 alt2">

<div class="line number6 index5 alt1"><code class="python plain">New <code class="python keyword">in <code class="python plain">Django <code class="python value">1.10<code class="python plain">.

</td>

</tr>

</table>

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

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python keyword">class <code class="python plain">UserInfoInline(admin.StackedInline): <code class="python comments"># TabularInline


<div class="line number2 index1 alt1"><code class="python spaces"><code class="python plain">extra <code class="python keyword">= <code class="python value">0

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">model <code class="python keyword">= <code class="python plain">models.UserInfo

<div class="line number4 index3 alt1">

<div class="line number5 index4 alt2">

<div class="line number6 index5 alt1"><code class="python keyword">class <code class="python plain">GroupAdminMode(admin.ModelAdmin):

<div class="line number7 index6 alt2"><code class="python spaces"><code class="python plain">list_display <code class="python keyword">= <code class="python plain">(<code class="python string">'id'<code class="python plain">,<code class="python string">'title'<code class="python plain">,)

<div class="line number8 index7 alt1"><code class="python spaces"><code class="python plain">inlines <code class="python keyword">= <code class="python plain">[UserInfoInline,]

</td>

</tr>

</table>

14. action,列表时,定制action中的操作

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2">

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python comments"># 定制Action行为具体方法

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python keyword">def <code class="python plain">func(<code class="python color1">self<code class="python plain">,queryset):

<div class="line number6 index5 alt1"><code class="python spaces"><code class="python functions">print<code class="python plain">(<code class="python color1">self<code class="python plain">,queryset)

<div class="line number7 index6 alt2"><code class="python spaces"><code class="python functions">print<code class="python plain">(request.POST.getlist(<code class="python string">'_selected_action'<code class="python plain">))

<div class="line number8 index7 alt1">

<div class="line number9 index8 alt2"><code class="python spaces"><code class="python plain">func.short_description <code class="python keyword">= <code class="python string">"中文显示自定义Actions"

<div class="line number10 index9 alt1"><code class="python spaces"><code class="python plain">actions <code class="python keyword">= <code class="python plain">[func,]

<div class="line number11 index10 alt2">

<div class="line number12 index11 alt1"><code class="python spaces"><code class="python comments"># Action选项都是在页面上方显示

<div class="line number13 index12 alt2"><code class="python spaces"><code class="python plain">actions_on_top <code class="python keyword">= <code class="python color1">True

<div class="line number14 index13 alt1"><code class="python spaces"><code class="python comments"># Action选项都是在页面下方显示

<div class="line number15 index14 alt2"><code class="python spaces"><code class="python plain">actions_on_bottom <code class="python keyword">= <code class="python color1">False

<div class="line number16 index15 alt1">

<div class="line number17 index16 alt2"><code class="python spaces"><code class="python comments"># 是否显示选择个数

<div class="line number18 index17 alt1"><code class="python spaces"><code class="python plain">actions_selection_counter <code class="python keyword">= <code class="python color1">True

</td>

</tr>

</table>

15. 定制HTML模板

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python plain">add_form_template <code class="python keyword">= <code class="python color1">None


<div class="line number2 index1 alt1"><code class="python plain">change_form_template <code class="python keyword">= <code class="python color1">None

<div class="line number3 index2 alt2"><code class="python plain">change_list_template <code class="python keyword">= <code class="python color1">None

<div class="line number4 index3 alt1"><code class="python plain">delete_confirmation_template <code class="python keyword">= <code class="python color1">None

<div class="line number5 index4 alt2"><code class="python plain">delete_selected_confirmation_template <code class="python keyword">= <code class="python color1">None

<div class="line number6 index5 alt1"><code class="python plain">object_history_template <code class="python keyword">= <code class="python color1">None

</td>

</tr>

</table>

16.raw_id_fields,详细页面,针对FK和M2M字段变成以Input框形式

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2">

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python plain">raw_id_fields <code class="python keyword">= <code class="python plain">(<code class="python string">'FK字段'<code class="python plain">,<code class="python string">'M2M字段'<code class="python plain">,)

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">fields <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,)

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">exclude <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,)

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">readonly_fields <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,)

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">fieldsets <code class="python keyword">= <code class="python plain">(

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python plain">(<code class="python string">'基本数据'<code class="python plain">,{

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python string">'fields'<code class="python plain">: (<code class="python string">'user'<code class="python plain">,<code class="python string">'ctime'<code class="python plain">,)

<div class="line number6 index5 alt1"><code class="python spaces"><code class="python plain">}),

<div class="line number7 index6 alt2"><code class="python spaces"><code class="python plain">(<code class="python string">'其他'<code class="python plain">,{

<div class="line number8 index7 alt1"><code class="python spaces"><code class="python string">'classes'<code class="python plain">: (<code class="python string">'collapse'<code class="python plain">,<code class="python string">'wide'<code class="python plain">,<code class="python string">'extrapretty'<code class="python plain">),<code class="python comments"># 'collapse','wide','extrapretty'

<div class="line number9 index8 alt2"><code class="python spaces"><code class="python string">'fields'<code class="python plain">: (<code class="python string">'user'<code class="python plain">,<code class="python string">'pwd'<code class="python plain">),

<div class="line number10 index9 alt1"><code class="python spaces"><code class="python plain">}),

<div class="line number11 index10 alt2"><code class="python spaces"><code class="python plain">)

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">filter_vertical <code class="python keyword">= <code class="python plain">(<code class="python string">"m2m字段"<code class="python plain">,) <code class="python comments"># 或filter_horizontal = ("m2m字段",)

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">ordering <code class="python keyword">= <code class="python plain">(<code class="python string">'-id'<code class="python plain">,)

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python plain">或

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python keyword">def <code class="python plain">get_ordering(<code class="python color1">self<code class="python plain">,request):

<div class="line number6 index5 alt1"><code class="python spaces"><code class="python keyword">return <code class="python plain">[<code class="python string">'-id'<code class="python plain">,]

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python plain">view_on_site <code class="python keyword">= <code class="python color1">False


<div class="line number2 index1 alt1"><code class="python plain">或

<div class="line number3 index2 alt2"><code class="python keyword">def <code class="python plain">view_on_site(<code class="python color1">self<code class="python plain">,obj):

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python keyword">return <code class="python string">'https://www.baidu.com'

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python plain">radio_fields <code class="python keyword">= <code class="python plain">{<code class="python string">"ug"<code class="python plain">: admin.VERTICAL} <code class="python comments"># 或admin.HORIZONTAL

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python comments"># show_full_result_count = True # 1 result (12 total)

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python comments"># show_full_result_count = False # 1 result (Show all)

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python plain">search_fields <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,)

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python keyword">from <code class="python plain">django.forms <code class="python keyword">import <code class="python plain">widgets


<div class="line number2 index1 alt1"><code class="python keyword">from <code class="python plain">django.utils.html <code class="python keyword">import <code class="python plain">format_html

<div class="line number3 index2 alt2">

<div class="line number4 index3 alt1"><code class="python keyword">class <code class="python plain">MyTextarea(widgets.Widget):

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python keyword">def <code class="python plain">init(<code class="python color1">self<code class="python plain">,attrs<code class="python keyword">=<code class="python color1">None<code class="python plain">):

<div class="line number6 index5 alt1"><code class="python spaces"><code class="python comments"># Use slightly better defaults than HTML's 20x2 box

<div class="line number7 index6 alt2"><code class="python spaces"><code class="python plain">default_attrs <code class="python keyword">= <code class="python plain">{<code class="python string">'cols'<code class="python plain">: <code class="python string">'40'<code class="python plain">,<code class="python string">'rows'<code class="python plain">: <code class="python string">'10'<code class="python plain">}

<div class="line number8 index7 alt1"><code class="python spaces"><code class="python keyword">if <code class="python plain">attrs:

<div class="line number9 index8 alt2"><code class="python spaces"><code class="python plain">default_attrs.update(attrs)

<div class="line number10 index9 alt1"><code class="python spaces"><code class="python functions">super<code class="python plain">(MyTextarea,<code class="python color1">self<code class="python plain">).init(default_attrs)

<div class="line number11 index10 alt2">

<div class="line number12 index11 alt1"><code class="python spaces"><code class="python keyword">def <code class="python plain">render(<code class="python color1">self<code class="python plain">,name,value,attrs<code class="python keyword">=<code class="python color1">None<code class="python plain">):

<div class="line number13 index12 alt2"><code class="python spaces"><code class="python keyword">if <code class="python plain">value <code class="python keyword">is <code class="python color1">None<code class="python plain">:

<div class="line number14 index13 alt1"><code class="python spaces"><code class="python plain">value <code class="python keyword">= <code class="python plain">''

<div class="line number15 index14 alt2"><code class="python spaces"><code class="python plain">final_attrs <code class="python keyword">= <code class="python color1">self<code class="python plain">.build_attrs(attrs,name<code class="python keyword">=<code class="python plain">name)

<div class="line number16 index15 alt1"><code class="python spaces"><code class="python keyword">return <code class="python plain">format_html(<code class="python string">'<textarea {}>rn{}'<code class="python plain">,final_attrs,value)

<div class="line number17 index16 alt2">

<div class="line number18 index17 alt1">

<div class="line number19 index18 alt2">

<div class="line number20 index19 alt1"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)

<div class="line number21 index20 alt2"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number22 index21 alt1">

<div class="line number23 index22 alt2"><code class="python spaces"><code class="python plain">formfield_overrides <code class="python keyword">= <code class="python plain">{

<div class="line number24 index23 alt1"><code class="python spaces"><code class="python plain">models.models.CharField: {<code class="python string">'widget'<code class="python plain">: MyTextarea},

<div class="line number25 index24 alt2"><code class="python spaces"><code class="python plain">}

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2">

<div class="line number4 index3 alt1"><code class="python spaces"><code class="python plain">prepopulated_fields <code class="python keyword">= <code class="python plain">{<code class="python string">"email"<code class="python plain">: (<code class="python string">"user"<code class="python plain">,<code class="python string">"pwd"<code class="python plain">,)}

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python keyword">from <code class="python plain">app01 <code class="python keyword">import <code class="python plain">models


<div class="line number2 index1 alt1"><code class="python keyword">from <code class="python plain">django.forms <code class="python keyword">import <code class="python plain">ModelForm

<div class="line number3 index2 alt2"><code class="python keyword">from <code class="python plain">django.forms <code class="python keyword">import <code class="python plain">fields

<div class="line number4 index3 alt1">

<div class="line number5 index4 alt2">

<div class="line number6 index5 alt1"><code class="python keyword">class <code class="python plain">MyForm(ModelForm):

<div class="line number7 index6 alt2"><code class="python spaces"><code class="python plain">others <code class="python keyword">= <code class="python plain">fields.CharField()

<div class="line number8 index7 alt1">

<div class="line number9 index8 alt2"><code class="python spaces"><code class="python keyword">class <code class="python plain">Meta:

<div class="line number10 index9 alt1"><code class="python spaces"><code class="python plain">model <code class="python keyword">= <code class="python plain">models <code class="python keyword">= <code class="python plain">models.UserInfo

<div class="line number11 index10 alt2"><code class="python spaces"><code class="python plain">fields <code class="python keyword">= <code class="python string">"all"

<div class="line number12 index11 alt1">

<div class="line number13 index12 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)

<div class="line number14 index13 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number15 index14 alt2">

<div class="line number16 index15 alt1"><code class="python spaces"><code class="python plain">form <code class="python keyword">= <code class="python plain">MyForm

</td>

</tr>

</table>

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

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="python decorator">@admin<code class="python plain">.register(models.UserInfo)


<div class="line number2 index1 alt1"><code class="python keyword">class <code class="python plain">UserAdmin(admin.ModelAdmin):

<div class="line number3 index2 alt2"><code class="python spaces"><code class="python plain">empty_value_display <code class="python keyword">= <code class="python string">"列数据为空时,默认显示"

<div class="line number4 index3 alt1">

<div class="line number5 index4 alt2"><code class="python spaces"><code class="python plain">list_display <code class="python keyword">= <code class="python plain">(<code class="python string">'user'<code class="python plain">,<code class="python string">'up'<code class="python plain">)

<div class="line number6 index5 alt1">

<div class="line number7 index6 alt2"><code class="python spaces"><code class="python keyword">def <code class="python plain">up(<code class="python color1">self<code class="python plain">,obj):

<div class="line number8 index7 alt1"><code class="python spaces"><code class="python keyword">return <code class="python plain">obj.user

<div class="line number9 index8 alt2"><code class="python spaces"><code class="python plain">up.empty_value_display <code class="python keyword">= <code class="python string">"指定列数据为空时,默认显示"

</td>

</tr>

</table>

</div>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!