CMDB资产管理系统开发【day26】:Django admin
想实现的是一个表里面的字段 选择性的出现在菜单栏
1、如何自定义菜单
自定义菜单前
在asset\admin.py里添加如下代码:
class NewAssetApprovalZoneAdmin(admin.ModelAdmin): list_display = (\'sn\',\'asset_type\',\'manufactory\',\'model\',\'cpu_model\',\'cpu_count\',\'cpu_core_count\',\'ram_size\',\'os_distribution\',\'os_release\',\'date\',\'approved\',\'approved_by\',\'approved_date\') \'\'\' 横着依次显示:\'sn\',\'asset_type\',...省略\'approved_by\',\'approved_date\' \'\'\' admin.site.register(models.NewAssetApprovalZone,NewAssetApprovalZoneAdmin) \'\'\'只有添加了NewAssetApprovalZoneAdmin才会在后台里显示,要不然即使设置了也不显示\'\'\'
自定义菜单后
2、如何自定义搜索
在asset\admin.py里添加如下代码:
class EventLogAdmin(admin.ModelAdmin,BaseAdmin): list_display = (\'name\',\'colored_event_type\',\'asset\',\'component\',\'detail\',\'date\',\'user\') search_fields = (\'asset\',) \'\'\'使用\'asset\'作为搜索\'\'\'
效果图
3、如何自定义过滤
在asset\admin.py里添加如下代码:
class EventLogAdmin(admin.ModelAdmin,BaseAdmin): list_display = (\'name\',\'colored_event_type\',\'asset\',\'component\',\'detail\',\'date\',\'user\') list_fields = (\'asset\',\'date\') \'\'\'使用\'asset\' date作为过滤\'\'\'
效果图
4、admin多对多
在asset\models.py里添加如下代码:
tags = models.ManyToManyField(\'Tag\', blank=True) fields_horizontal = (\'tags\',) \'\'\'注意:这种只对多对多有效\'\'\'
在asset\admin.py里添加如下代码:
admin.site.register(models.Asset,AssetAdmin)
更改前
更改后
5、完成如下图显示的(效果下拉框,选择效果)
在asset\admin.py里添加如下代码:
class NewAssetApprovalZoneAdmin(admin.ModelAdmin): .....省略 actions = [\'approve_selected_objects\'] def approve_selected_objects(modeladmin, request, queryset): selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME) ct = ContentType.objects.get_for_model(queryset.model) return HttpResponseRedirect("/asset/new_assets/approval/?ct=%s&ids=%s" % (ct.pk, ",".join(selected))) approve_selected_objects.short_description = "批准入库"
完成效果如下
上面的一点go就报错
为什么会报如下错误呢 ?因为你给了我三个,
那两个是什么东西?
actions = [\'approve_selected_objects\'] def approve_selected_objects(*args,**kargs): print(*args,**kargs) pass
一个是request的那个对象 一个是你选中那几个