【发布时间】:2018-06-12 13:36:46
【问题描述】:
我有许多模型与 Person 模型具有 ForeignKey 关系。例如:
class PersonData(BaseModel):
person = models.ForeignKey(Person)
data = models.TextField()
我想锁定管理员,以便在创建 PersonData 对象后,管理员用户可以更改数据,但不能更改 Person。
起初看起来很简单——我把它放在PersonDataAdmin 类中:
def get_readonly_fields(self, request, obj=None):
if obj:
return self.readonly_fields + ('person',)
return self.readonly_fields
在显示方面,它按预期工作——我看到person 的值,但它是灰色的,所以我无法更改它——但是当我尝试更改数据并提交表单时,我收到一条错误消息,“请更正以下错误。”没有出现其他消息,但经过一番挖掘,我发现表单缺少所需 person 字段的值。
我研究了一个解决方案,该解决方案涉及创建一个自定义表单,该表单将选择性地禁用此字段(例如 this 或 this),但是 (a) 我没有成功让它工作,并且(b) 对于看似简单得多的情况,这似乎是一大堆代码。我也研究过使用exclude,但遇到了与read_only相同的问题。
关于如何实现这一点的任何想法?谢谢!
【问题讨论】:
-
你可以在 django admin 中使用 readonly_fields
-
我的问题比这更复杂。
标签: django django-admin