Python 使django只读字段在管理员界面上可见
我正在开发一个Django项目,其中我希望允许用户仅在add_视图上编辑特定字段。因此,我已经覆盖了admin.py上的change\u view方法,以便它可以在那里设置我的readonly\u字段。但是,Django不会显示只读_字段 对我来说,似乎真的很难显示只读字段。我的意思是,如果它是只读的,那么它的读部分在哪里?它应该是可读的(仅),而不是可食的。如果我想隐藏它,应该有一个名为hidden_fields的选项。你们不同意吗 我想知道是否有任何严格的方法可以使只读字段在我的管理员上可见,但不可编辑 我的admin.py如下所示: 从django.contrib导入管理 从core.models导入框Python 使django只读字段在管理员界面上可见,python,django,Python,Django,我正在开发一个Django项目,其中我希望允许用户仅在add_视图上编辑特定字段。因此,我已经覆盖了admin.py上的change\u view方法,以便它可以在那里设置我的readonly\u字段。但是,Django不会显示只读_字段 对我来说,似乎真的很难显示只读字段。我的意思是,如果它是只读的,那么它的读部分在哪里?它应该是可读的(仅),而不是可食的。如果我想隐藏它,应该有一个名为hidden_fields的选项。你们不同意吗 我想知道是否有任何严格的方法可以使只读字段在我的管理员上可见
class BoxAdmin(admin.ModelAdmin):
def change_view(self, request, object_id, form_url='', extra_context=None):
self.readonly_fields = ('colour',)
return super(BoxAdmin, self).change_view(request, object_id)
def add_view(self, request, form_url='', extra_context=None):
self.readonly_fields = []
return super(BoxAdmin, self).add_view(request, extra_context=c)
您不应该设置self.readonly\u字段,而应该覆盖
我发现问题出在我的注意力不集中。实际上Django确实显示只读_字段,但我看不到,因为它们显示在表单的底部。当您不设置ModelForm.fields属性时,它们会进入底部,这与我的情况差不多。不足以将
readonly\u fields=('color',)
元组添加到BoxAdmin
类中?你确定它不在那里吗?除非您明确地设置了字段
或字段集
,只读字段
显示在所有可编辑字段之后的底部。@Gocht,好的。看起来我必须在我的模型管理员上设置fields属性才能使readonly_字段工作。当Django在文档中说它将使用模型上设置的字段作为ModelAdmin.fields属性的默认字段集时,这真的很奇怪。哦!!事实上,它们出现在底部。对不起,伙计们,我的错。我现在觉得自己真的很傻,很傻。花了我好几个小时的生命。无论如何谢谢有没有办法让球场重新恢复?我发现了问题所在,而这恰恰是因为我缺乏注意力。实际上,Django确实显示只读_字段,但我看不到它,因为当您不设置ModelForm.fields属性时,它们显示在表单的底部,这与我的情况非常相似。无论如何,谢谢。ModelAdmin
对象只实例化一次,因此如果更改self.readonlu\u字段
,可能会影响同时浏览您网站的其他用户。所以我推荐上面的方法,即使现在您已经意识到您当前的代码正在屏幕底部显示字段。您是对的!我已经注意到了这一点并修复了它。实际上,我的用例考虑了用户权限。我创建了一个名为Box\u full\u access的权限。因此,我没有根据实例设置只读字段,而是根据用户是否具有box_full_access perm检查change_view(),我设置只读字段=[],否则只读字段=['color','field1','field2',…]。
def get_readonly_fields(request, obj=None):
if obj is None: # add form
return []
else:
return ['colour']