我有一个在模型中“需要”的字段(slug),但想要将ModelAdmin类中的字段更改为可选。如果用户没有填写,则会自动填入其他字段(名称)。如何在ModelAdmin内动态处理Django中的表单域?
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
但是,这两种解决方案都不适用于我。除了手动创建表单之外,还有其他更快捷的解决方案吗?
我有很多这些形式,手工操作可能很繁琐而且难以维护。
我使用'forms.fields ['slug']。required'得到了一个'AttributeError'表示字段不是一个有效的属性。提供一个定制的表单是我试图避免的,因为涉及的工作量很大,因为我有很多模型。 另外,我不完全确定为什么'super(self .__ class__,self)'会因为子分类而中断?不应该基于范围来找出Python吗? 感谢您关注此事。 – GoogleDroid 2011-05-21 19:28:45
再次感谢!这是我的一个错字,但在我的代码中是正确的,但仍然无法正常工作。我发现从'get_form'返回的表单的类型是'django.forms.models.ModelFormMetaclass'。 'dir(form)'也没有显示字段属性。 – GoogleDroid 2011-05-21 21:01:46