基于 URL 变量的 Django 模型表单小部件选择
Django model-forms widget choice based on URL variables
假设我有一个基于模型的表格:
Form1:
class Meta:
model = Comment
widgets = {"field1": forms.HiddenInput } # option 1
#or
widgets = {"field2": forms.HiddenInput } # option 2
我有 2 个小部件选项。 First - 显示第二个字段但隐藏第一个和第二个 - 其他方式。
选项 1 或选项 2 的选择基于它将从 URL kwargs 接收到的“关键”变量。例如,如果 key == 1 则选择选项 1,如果 key == 2 – 则选择第二个选项。
#example
<a href="{% url "app:route" key="1 or 2 " pk=object.pk %}"> COMMENT</a>
问题是如何在 .forms 中访问 self.kwargs 字典?还是有另一种不那么愚蠢的方法来做到这一点?
最终目标是使用其中一个选项,基于“key”变量,即不同的 url 将发送不同的“key = x”变量。
我在哪里可以在 Django 中实现这种逻辑?观看次数?
您需要将访问 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
假设我有一个基于模型的表格:
Form1:
class Meta:
model = Comment
widgets = {"field1": forms.HiddenInput } # option 1
#or
widgets = {"field2": forms.HiddenInput } # option 2
我有 2 个小部件选项。 First - 显示第二个字段但隐藏第一个和第二个 - 其他方式。 选项 1 或选项 2 的选择基于它将从 URL kwargs 接收到的“关键”变量。例如,如果 key == 1 则选择选项 1,如果 key == 2 – 则选择第二个选项。
#example
<a href="{% url "app:route" key="1 or 2 " pk=object.pk %}"> COMMENT</a>
问题是如何在 .forms 中访问 self.kwargs 字典?还是有另一种不那么愚蠢的方法来做到这一点? 最终目标是使用其中一个选项,基于“key”变量,即不同的 url 将发送不同的“key = x”变量。
我在哪里可以在 Django 中实现这种逻辑?观看次数?
您需要将访问 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