我想这里会讨论类似的问题,但我找不到它.
假设我有一名编辑和一名主管.我希望编辑能够添加新内容(例如新闻帖子),但在发布之前必须由主管确认.
当编辑列出的所有项目,我想设置的模型某些字段(如一个"ACK"字段)为只读(这样他就可以知道已经ack'ed,什么是仍在等待批准),但管理员应该能够改变一切(list_editable将是完美的)
这个问题的可能解决方案是什么?
我认为有一种更简单的方法:
嘉宾,我们有同样的Blog-Post问题
博客/ models.py:
Class Blog(models.Model): ... #fields like autor, title, stuff.. ... class Post(models.Model): ... #fields like blog, title, stuff.. ... approved = models.BooleanField(default=False) approved_by = models.ForeignKey(User) class Meta: permissions = ( ("can_approve_post", "Can approve post"), )
而魔术在管理员:
博客/ admin.py:
... from django.views.decorators.csrf import csrf_protect ... def has_approval_permission(request, obj=None): if request.user.has_perm('blog.can_approve_post'): return True return False Class PostAdmin(admin.ModelAdmin): @csrf_protect def changelist_view(self, request, extra_context=None): if not has_approval_permission(request): self.list_display = [...] # list of fields to show if user can't approve the post self.editable = [...] else: self.list_display = [...] # list of fields to show if user can approve the post return super(PostAdmin, self).changelist_view(request, extra_context) def get_form(self, request, obj=None, **kwargs): if not has_approval_permission(request, obj): self.fields = [...] # same thing else: self.fields = ['approved'] return super(PostAdmin, self).get_form(request, obj, **kwargs)
通过这种方式,您可以在django中使用自定义权限的api ,并且可以覆盖保存模型的方法或获取查询集(如果必须).在methid中,has_approval_permission
您可以定义用户何时可以或不可以执行某些操作的逻辑.