相关疑难解决方法(0)

Django管理员 - 只读取所有字段

我试图使所有字段只读,而不明确列出它们.

就像是:

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未设置.

有任何想法吗?

python django django-admin

28
推荐指数
5
解决办法
2万
查看次数

Django admin:将必填字段设为只读

我有许多与模型具有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.

有关如何实现这一目标的任何想法?谢谢!

django django-admin

0
推荐指数
2
解决办法
1592
查看次数

标签 统计

django ×2

django-admin ×2

python ×1