<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">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 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>
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|