Tip #8: 对某些用户只读的 admin 界面
啥意思?假设你的祖母计算瞅一眼这些可爱的图片,她站在你背后,认为 Django 的 admin 界面挺有意思。不过你能肯定,她如果应用 admin 界面,生怕一?按钮的点击就能毁掉履┞符个网站。那么,我们加上 grandma-proof™,如许就支撑只读的 admin 界面(就是或人说的“数据浏览”):
- class GrandmaProofAdmin(admin.ModelAdmin):
- def get_readonly_fields(self, request, obj=None):
- if request.user.username == 'granny':
- return [f.name for f in self.model._meta.fields]
- else:
- return super(GrandmaProofAdmin, self).get_readonly_fields(request, obj)
- class PictureAdmin(GrandmaProofAdmin):
- ...
如今你可以安然的把修改图片的权限摊开给你的祖母,如许她就能浏览图片列表。要留意这个筹划肯定不克不及实用于所有应用处景,你还须要处理更多的情况。
Tip #4: 搜刮你须要的所有字段
Tip #9: 为每个对象自定义 action
有时刻你须要在单个对象上履行特定的 action。‘actions’对象当然可以完成这个义务,不过过程会显得很麻烦:点击对象、选择 action、再点击一个按钮……肯定有更便捷的方法,对吧?让我们想办法只点击一次就全部搞定。
此次我们要实现老祖母的另一个宏达的设法主意。她欲望能给某些编辑发 email,告诉他们她爱好的所有图片。
假如最终你决定要推广所有有 100+ 的帖子的作者。然则,我们若何区分它们?让我们创建一个过滤器,并把它添加到我们的变革列表。
但愿她如今可以或许知足。如今每个对象字段加上了一个链接,让她点一下就可以发送邮件。
Bonus Tip: 只需为 admin 添加一行代率攀来削减萌芽量
Django admin (Django 也是如斯) 最常用也是最有效的技能是 select_related。呃,你已经都知道了?不就是把对象的名字传给 ModelAdmin 的 list_select_related 属性来实现相干对象的预加载嘛。然则,你知道你并没有描述全部的相干对象吗?只须要设置成 True,Django 就可以主动预加载外部对象: