django - 基于 URL 变量的 Django 模型表单小部件选择
问题描述
假设我有一个基于模型的表单:
Form1:
class Meta:
model = Comment
widgets = {"field1": forms.HiddenInput } # option 1
#or
widgets = {"field2": forms.HiddenInput } # option 2
我有 2 个小部件选项。第一个 - 显示第二个字段,但隐藏第一个和第二个 - 其他方式。选项 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
推荐阅读
- google-apps-script - 谷歌表:如何匹配空值?
- varnish - 跨 VCL 重新加载传递 Varnish 结构变量
- reactjs - 为什么我不能对 react-query refetchQueries 进行 redux-saga 调用?
- scala - Scala:使用破折号多个参数运行外部脚本
- django - Django ORM - 通过在某些字段上设置标准但从返回的记录中排除当前记录来选择相关记录
- c++ - 删除双链表中的节点不起作用
- node.js - Browsersync 不断加载,从不实际加载页面
- python - 如何用硒单击表格中的元素?
- amazon-web-services - 使用 Microsoft 进行 SS0 身份验证时,使用在 AWS ECS 集群上运行的 keycloak 获取 IDENTITY_PROVIDER_LOGIN_ERROR
- r - quadprog::solve.QP 参数的使用和确定