其他分享
首页 > 其他分享> > 如何在ModelAdmin中动态操作Django中的表单字段?

如何在ModelAdmin中动态操作Django中的表单字段?

作者:互联网

我有一个模型中“必需”的字段(slug),但是想要将ModelAdmin类中的字段更改为可选字段.如果用户未填写,则会由另一个字段(名称)自动填写.

class SomeModel(model.Model):
  name = model.CharField(max_length=255)
  slug = model.SlugField(unique=True, max_length=255)

我尝试以各种方式执行此操作,例如在ModelAdmin中重写get_form()或使用ModelForm类并专门指定表单.

class SomeModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        form = super(self.__class__, self).get_form(request, obj, **kwargs)
        form.slug.required = False
        return form

但是,这两种解决方案都不适合我.除了手动创建表单外,还有其他更快的解决方案吗?

我有很多这样的形式,手工操作可能很乏味,很难维护.

解决方法:

当我自己在解决同样的问题时,通过Google找到此页面.以下内容也适用于ModelAdmin:

def get_form(self, *args, **kwargs):
    form = super(SomeModelAdmin, self).get_form(*args, **kwargs)
    form.base_fields['slug'].required = False
    return form

从更新的ModelFormMetaclass创建的后续表单将不再需要slug字段.

这在我的情况下效果更好,我只有一个类,我需要在该类中取消该字段,并且不需要在保存时进行任何数据转换.如果您有很多课程,或者需要进行数据转换,那么GoogleDroid的解决方案会更好.

标签:python,forms,django,modeladmin
来源: https://codeday.me/bug/20190903/1797108.html