基于URL变量的Django模型形式小部件选择

时间:2019-04-17 14:23:08

标签: django django-forms django-widget

让我说说我有一个基于模型的表格:

Form1:
class Meta:
    model = Comment
        widgets = {"field1": forms.HiddenInput } # option 1
#or 
    widgets = {"field2": forms.HiddenInput } # option 2

我有2个小部件选项。第一-显示第二个字段,但隐藏第一和第二-其他方式。 选项1或选项2的选择取决于它会从URL扭曲接收到的“关键”变量。例如,如果键== 1,则选择选项1;如果键== 2,则选择第二选项。

#example

<a href="{%  url "app:route" key="1 or 2 " pk=object.pk %}"> COMMENT</a>

问题是如何以.forms形式访问self.kwargs词典?还是有另一种更简单的方法呢? 最终目标是使用其中一个基于“ key”变量的选项,即不同的URL会发送不同的“ key = x”变量。

在哪里可以在Django中实现这种逻辑?观看次数?

1 个答案:

答案 0 :(得分:1)

您需要向表单发送访问url的信息,然后可以使用此信息选择要使用的窗口小部件。

更改表单的__init__

#forms.py

class Form1(ModelForm):
    def __init__(self, key, *args, **kwargs):
        super(Form1, self).__init__(*args, **kwargs)
        if key == 1:
            self.fields['field1'].widget = forms.HiddenInput()  # option 1 HiddenInput() 
        else:
            self.fields['field2'].widget = forms.HiddenInput()  # option 2 HiddenInput() 

    class Meta:
        model = Comment

然后,在您看来,将请求的kwargs中的密钥添加到表单的kwargs

# views.py

class MyFormView(FormView):
    form_class = Form1

    def get_form_kwargs(self):
        kwargs = super(MyFormView, self).get_form_kwargs()
        kwargs['key'] = self.kwargs.get('key')
        return kwargs