我试图使所有字段只读,而不明确列出它们.
就像是:
class CustomAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
if request.user.is_superuser:
return self.readonly_fields
return self.fields
Run Code Online (Sandbox Code Playgroud)
问题是此时CustomAdmin.fields未设置.
有任何想法吗?
我有许多与模型具有ForeignKey关系的Person模型.例如:
class PersonData(BaseModel):
person = models.ForeignKey(Person)
data = models.TextField()
Run Code Online (Sandbox Code Playgroud)
我想锁定管理员,这样一旦PersonData创建了一个对象,管理员用户就可以更改数据,但无法更改Person.
起初它看起来很简单 - 我把它放在PersonDataAdmin课堂上:
def get_readonly_fields(self, request, obj=None):
if obj:
return self.readonly_fields + ('person',)
return self.readonly_fields
Run Code Online (Sandbox Code Playgroud)
在显示方面,这是按预期工作 - 我看到的值person,但它是灰色的所以我无法改变它 - 但是当我尝试更改数据并提交表单时,我收到一条错误消息, "请更正以下错误." 没有其他消息出现,但通过一些挖掘,我发现表单缺少必填person字段的值.
我已经研究了一个解决方案,它将涉及创建一个自定义表单,可以选择性地禁用这个字段(类似这个或这个),但是(a)我没有成功地使它工作,并且(b)它似乎是一个对于看起来更简单的情况的大量代码.我也考虑过使用exclude,但遇到了同样的问题read_only.
有关如何实现这一目标的任何想法?谢谢!