【问题标题】:Dynamic forms in django-admindjango-admin 中的动态表单
【发布时间】:2011-05-16 13:05:39
【问题描述】:

我想让管理员添加表单动态化。我想根据相关对象中的设置添加一些表单域。

我有这样的事情:

class ClassifiedsAdminForm(forms.ModelForm):


  def __init__(self,*args, **kwargs):
     super(ClassifiedsAdminForm, self).__init__(*args, **kwargs)
     self.fields['testujemy'] = forms.CharField(label = "test")

在 admin.py 中:

class ClassifiedAdmin(admin.ModelAdmin):
     def get_form(self, request, obj=None, **kwargs):
         return ClassifiedsAdminForm

如您所见,我想将“testujemy”CharField 添加到管理员添加表单和更改表单。然而,这种方式行不通。有没有办法在 init 中添加字段?它在正常视图下工作。

【问题讨论】:

    标签: python django django-admin django-forms


    【解决方案1】:

    我已经设法使用 type() 来做到这一点。

    class ClassifiedAdmin(admin.ModelAdmin):
    
     def get_form(self, request, obj=None, **kwargs):
    
        adminform = ClassifiedsAdminForm()
        fields = adminform.getNewFields()
    
        form = type('ClassifiedsAdminForm', (forms.ModelForm,), fields)
    
        return form
    

    希望对某人有所帮助。

    【讨论】:

    • 谢谢,干得好,节省了我很多时间自己搞清楚:)
    • 这仍然让我很困惑。我希望能够简单地在 ModelAdmin 类定义中指定表单类。不过,我感谢您添加此答案;还有一些其他的 SO 问题看似相同,但仍未得到解答或未得到完整解答。
    • 如果这对您没有意义,请阅读以下内容:stackoverflow.com/questions/100003/… 直到明白为止。 Django 在内部大量使用元类,尤其是模型和表单
    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2011-12-21
    • 2018-03-11
    相关资源
    最近更新 更多