【问题标题】:Django function based view get_form_kwargs基于 Django 函数的视图 get_form_kwargs
【发布时间】:2018-11-13 10:09:23
【问题描述】:

我有以下问题。

通常在基于 Django 类的视图中,get_form_kwargs 方法用于将 kwargs 提供给表单 __init__()。例如:

class ComponentForm(forms.ModelForm):
    diameter = forms.ModelChoiceField(queryset=Diameter.objects.all(), label='Diameter') # required=True, 

    class Meta:
        model = Component
        fields = [
            'component_type',
            'diameter',
            'length'
        ]

    def __init__(self, *args, **kwargs):
        circuit = kwargs.pop('circuit')
        project = kwargs.pop('project')
        super(ComponentForm, self).__init__(*args, **kwargs)
        self.fields['diameter'].queryset = Diameter.objects.filter(project=project, material = circuit.material_type)

在上面的示例代码中,“电路”和“项目”由相应视图中的 get_form_kwargs 方法提供。

现在的问题是如何使用基于函数的视图将这些 kwargs 传递给 ComponentForm __init__()

【问题讨论】:

    标签: django view


    【解决方案1】:

    两种方式。

    直接在构造函数调用中指定。

    form = ComponentForm(keyword_arg1=value1, keyword_args2=value2)
    

    或者构建一个字典并使用 **kwargs 语法将其传递 - 我发现这在动态添加属性时很有用,并且在使用继承时也很有用(比如对 super() 的调用。init( ) 在您的示例中)。

    kwargs = {keyword_arg1: value1}
    kwargs.update({keyword_arg2:value2}) # usually with conditionals to specify what gets added
    form = ComponentForm(**kwargs)
    

    【讨论】:

      【解决方案2】:

      好吧,你只是通过它们。

      form = ComponentForm(circuit=whatever, project=whatever)
      

      【讨论】:

        猜你喜欢
        • 2014-02-16
        • 2021-03-28
        • 2021-05-30
        • 1970-01-01
        • 2013-03-25
        • 1970-01-01
        • 2015-11-24
        • 2021-01-24
        • 2018-03-05
        相关资源
        最近更新 更多