如何在ModelAdmin中动态处理Django中的表单字段?

Goo*_*oid 4 python forms django modeladmin

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

class SomeModel(model.Model):
  name = model.CharField(max_length=255)
  slug = model.SlugField(unique=True, max_length=255)
Run Code Online (Sandbox Code Playgroud)

我尝试了各种方法,例如在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
Run Code Online (Sandbox Code Playgroud)

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

我有很多这样的表格,而手工操作可能很繁琐且难以维护。

Eri*_*c P 5

我自己也遇到同样问题时,通过Google找到了此页面。以下内容也适用于ModelAdmin

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

通过更新创建的后续表单ModelFormMetaclassslug不需要该字段。

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