gpt4 book ai didi

django - Django管理员: Making a required field read-only

转载 作者:行者123 更新时间:2023-12-05 01:37:15 25 4
gpt4 key购买 nike

我有许多与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字段的值。

我研究了一个解决方案,该解决方案涉及创建一个自定义表单,该表单将有选择地禁用此字段(类似于 thisthis),但是(a)我未能成功使其工作,并且(b)看起来像是看起来似乎更简单的情况的大量代码。我也研究了使用 exclude,但遇到了与 read_only相同的问题。

关于如何实现此目标的任何想法?谢谢!

最佳答案

我通常要做的是将模型中的字段设置为editable=False,然后在admin.py中将字段设置为只读,如下所示:

class PersonData(BaseModel):
person = models.ForeignKey(Person, editable=False)
data = models.TextField()

然后在admin.py中
class PersonDataAdmin(admin.ModelAdmin):
readonly_fields=('person',)

希望这行得通!

关于django - Django管理员: Making a required field read-only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48067882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com