Django 管理面板中特定字段的权限
Permission to specific field in Django admin panel
我在 Django 中有一个模型,我想从管理面板向它添加实例。
几乎没有用户可以访问管理面板来为模型创建新帖子,我有 2 个问题:
是否可以检测 用户在面板中以自动检测字段 "Author"? (见图中红色矩形)
我可以禁用特定用户将 "Published" 字段标记为 true 的选项吗? (见图中绿色矩形)
对于预填充字段,您可以覆盖 get_form 方法:
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
form.base_fields['author'].initial = request.user
return form
对于禁用字段,您也可以覆盖...get_readonly_fields:
class YourModelAdmin(admin.ModelAdmin):
readonly_fields = ('whatever', ) # whatever fields you have by default
limited_fiels = ('published', )
def get_readonly_fields(self, request, obj=None):
if request.user.groups.filter(name='YourPermissionGroupName').exists():
return self.limited_fiels
return super().get_fieldsets(request, obj=obj)
您可能还需要覆盖 get_fields 以从可变字段列表中删除 published
。
我在 Django 中有一个模型,我想从管理面板向它添加实例。
几乎没有用户可以访问管理面板来为模型创建新帖子,我有 2 个问题:
是否可以检测 用户在面板中以自动检测字段 "Author"? (见图中红色矩形)
我可以禁用特定用户将 "Published" 字段标记为 true 的选项吗? (见图中绿色矩形)
对于预填充字段,您可以覆盖 get_form 方法:
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
form.base_fields['author'].initial = request.user
return form
对于禁用字段,您也可以覆盖...get_readonly_fields:
class YourModelAdmin(admin.ModelAdmin):
readonly_fields = ('whatever', ) # whatever fields you have by default
limited_fiels = ('published', )
def get_readonly_fields(self, request, obj=None):
if request.user.groups.filter(name='YourPermissionGroupName').exists():
return self.limited_fiels
return super().get_fieldsets(request, obj=obj)
您可能还需要覆盖 get_fields 以从可变字段列表中删除 published
。