Python 将FormMixin/FormView与动态创建的表单一起使用

Python 将FormMixin/FormView与动态创建的表单一起使用,python,django,forms,mixins,Python,Django,Forms,Mixins,在处理动态创建的表单时(比方说,为了在运行时填充一个多选字段),是否有一种干净的编程方式来使用这种表单以及表单视图类 class MultipleChoiceForm(forms.Form): def __init__(self, options, *args, **kwargs): super(MultipleChoiceForm, self).__init__(*args, **kwargs) self.fields['calendars'] = fo

在处理动态创建的
表单
时(比方说,为了在运行时填充一个多选字段),是否有一种干净的编程方式来使用这种
表单
以及
表单视图

class MultipleChoiceForm(forms.Form):
    def __init__(self, options, *args, **kwargs):
        super(MultipleChoiceForm, self).__init__(*args, **kwargs)
        self.fields['calendars'] = forms.MultipleChoiceField(
                                      widget=forms.CheckboxSelectMultiple,
                                      choices=[(o['id'], o['summary']) for o in options],
                                      required=True)
根据now,我设法重载了我的
FormView
get\u form()
方法:

def get_form(self, form_class=None):
    """
    Returns an instance of the form to be used in this view.
    """
    if form_class is None:
        form_class = self.get_form_class()
    return form_class(self.options, **self.get_form_kwargs())

但我觉得有点不太对劲。。。可能已经有人问过这个问题,但是对于这个基本场景来说,这是一个更简洁、更容易的解决方案吗?

替代
get\u form\u kwargs
稍微更简洁一些。请参阅我上周对的回答。@Alasdair正确,但我不认为这将使我免于重写大部分Mixin逻辑(验证、绑定……)的负担:/为什么您认为您的代码会破坏验证?您不必重写mixin逻辑-重写
get_form_kwargs
可以在实例化表单时添加额外的kwargs
选项。表单绑定/验证代码的其余部分应保持不变。@Alasdair POST因“选择有效选项”而失败,表单在没有任何选择的情况下重新呈现:它似乎没有保留我在运行时创建的选项……是的,您需要确保对视图的GET和POST请求的
选项
相同。如果您在URL(例如在查询字符串中)或
request.POST
(例如作为隐藏字段)中包含这些选项,请注意用户可能会对其进行篡改。