在Django Admin中将预填充的段塞字段设置为只读

Mee*_*shi 3 django-admin

我想将slug字段设置为read_only,具体取决于其他字段值,如"lock_slug".

意味着将有两个条件.

1)当"lock_slug"的值为false时,slug字段直接从字段"title"预先填充.

prepopulated_fields = {"slug": ("title",),}
Run Code Online (Sandbox Code Playgroud)

2)当"lock_slug"的值为真时,slug字段为readonly.

def get_readonly_fields(self, request, obj = None):
    if obj and obj.lock_slug == True:
        return ('slug',) + self.readonly_fields        
    return self.readonly_fields
Run Code Online (Sandbox Code Playgroud)

这两个工作独立,但两者都有问题.

意味着当我尝试在编辑时添加get_readonly_fields()然后由于prepopulated_field而出错.这两个相互崩溃.

管理员方面都有任何解决方案.

我也参考下面的链接

在Django Admin中根据另一个字段的值创建一个readonly字段

django admin在修改obj时使字段为只读,但在添加新obj时需要

但是不能同时处理这两个问题.

谢谢,

米纳克什

ver*_*4ka 7

这是另一种方式:

class PostAdmin(admin.ModelAdmin):
    list_display = (
        'title',
        'slug',
    )
    prepopulated_fields = {'slug': ('title',)}

    def get_readonly_fields(self, request, obj=None):
        if obj:
            self.prepopulated_fields = {}
            return self.readonly_fields + ('slug',)
        return self.readonly_fields
Run Code Online (Sandbox Code Playgroud)

  • 2016年,这不起作用.如果字段是只读的,则意味着它不会显示,并且预先填充的字段将无法预先填充.我在'theModelForm'中找不到'你'钥匙'slug' (8认同)

Mee*_*shi 0

我们不能将预污染字段设为只读。因此,我创建了一个未预先填充的新字段,并在该字段上执行操作,我的问题得到了解决。