gpt4 book ai didi

python - Django 多表单工厂

转载 作者:太空狗 更新时间:2023-10-29 21:44:41 25 4
gpt4 key购买 nike

处理多种形式的最佳方式是什么?我想把几种形式合二为一。例如,我想将 ImangeFormSet 和 EntryForm 组合成一种形式:

class ImageForm(forms.Form):
image = forms.ImageField()
ImageFormSet = formset_factory(ImageForm)

class EntryForm(forms.Form):
title = forms.CharField(max_length=100)

result_form = combine(EntryForm, ImageFormSet) # here it goes

我发现 2 年前介绍 multipleform_factory() 方法的演示文稿,但我不确定这是最好的方法:http://www.slideshare.net/kingkilr/forms-getting-your-moneys-worth

最佳答案

一个想法(未检查是否可行):

class MySuperForm(CombinedForm):
includes = (ImageForm, EntryForm, )

see here表单是如何构建的。您可以通过从 BaseForm 扩展并提供另一个 __metaclass__ 来创建自己的 Form。

class CombinedForm(BaseForm):
__metaclass__ = DeclarativeFieldsMetaclassFromMultipleClasses

在 DeclarativeFieldsMetaclassFromMultipleClasses 中,您所做的基本上与 here 相同, 除非你总结了

上的类中声明的字段
class DeclarativeFieldsMetaclassFromMultipleClasses(type):
def __new__(cls, name, bases, attrs):
for clazz in attrs['includes']:
attrs['base_fields'] += get_declared_fields(bases, clazz.attrs)
new_class = super(DeclarativeFieldsMetaclassFromMultipleClasses,cls).__new__(cls, name, bases, attrs)
if 'media' not in attrs:
new_class.media = media_property(new_class)
return new_class

关于python - Django 多表单工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3612726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com