Django Admin Site
1. 自定后台管理面板列表显示的返回值
class ThesisTopicReviewHistoryAdmin(admin.ModelAdmin): list_display = ('reviewer', 'thesisTopic', 'comment', 'state', ) list_filter = ('state', 'reviewer', 'created', ) search_fields = ('thesisTopic',) def save_model(self, request, obj, form, change): # 保存该评审记录 obj.save() # 改变相应题目的评审状态 topic = obj.thesisTopic topic.reviewState = obj.state topic.save() def get_readonly_fields(self, request, obj=None): if request.user.is_superuser: return () else: return self.list_display
以上类如 get_attrbute_fields()的方法均可以重写。
如果需要让一个 timestamp 类型的 create_at
属性不是显示整数二十显示一个完整的日期,可以重写此方法.
class TeacherReviewAdmin(admin.ModelAdmin): list_display = ('get_topic', 'student', 'comment', 'score','create_at','get_year', 'review_state',) list_filter = ('student__year', 'student__studentClass', 'student__studentClass__campus') search_fields = ('student__name', 'student__studentNo') teacher_readonly_fields = ('student', 'topic', 'finalthesisdoc',) teacher_readonly_fields_no_topic = ('student', 'topic', 'finalthesisdoc', 'comment', 'score', 'review_state',) superuser_readonly_fields = ('topic', 'finalthesisdoc',) superuser_fields = ('student', 'topic', 'finalthesisdoc', 'comment', 'score', 'review_state',) teacher_fields = ('student', 'topic', 'finalthesisdoc', 'comment', 'score', 'review_state',) def get_year(self, obj): return obj.student.year # 甚至可以动态更改属性的描述 get_year.short_description = u'年份' get_year.admin_order_field = '-student__year' def create_at(self, obj=None): return datetime.datetime.fromtimestamp(obj.create_at)
2. 自定义列表字段 html 标签返回
class WeiboUserAdmin(admin.ModelAdmin): def expires_time(self, obj): return datetime.datetime.fromtimestamp(obj.expires_at) expires_time.short_description = u'授权过期时间' def refresh(self,obj): btn_str = '<a class="btn btn-xs btn-danger" href="{}">{}</a>' return format_html(btn_str,'http://www.google.com',obj.uid) refresh.short_description = u'更新授权' # 注意要记得把这个方法放到现实列表里 list_display = ('nick','uid','access_token','expires_time','refresh')
这样你的表单上就会出现列按钮,同样的,你可以为此定义一个显示头像的方法
3. 下拉框列表过滤
def formfield_for_foreignkey(self, db_field, request=None, **kwargs): # 是超级管理员就全部跳过 if request.user.is_superuser: pass # 不是超级管理员并且字段符合的话,就进行过滤 elif db_field.name == 'official': kwargs['queryset'] = Official.objects.filter(user=request.user) return super(FilterAdmin, self).formfield_for_foreignkey(db_field, request=None, **kwargs)
下拉框过滤
竟然全部都是动态的字段,感觉很不安全啊
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于