I\xe2\x80\x99m 尝试将条件字段添加到 wagtail 页面类型模型,条件字段可能如下图所示。有两个字段:Question和Answer。应根据问题字段的选择显示答案字段值
\n\n\n\n如果我们从问题中选择丰田,那么凯美瑞和陆地巡洋舰应该显示在答案下拉列表中,如果我们选择本田,那么思域和雅阁应该显示在答案中。
\n\n在blocks.py中我有两个类分别负责问题和答案字段
\n\nclass ConditionsQuestionBlock(blocks.ChooserBlock):\n widget = Select\n class Meta:\n icon = "question"\n\n @cached_property\n def target_model(self):\n return Question\n\n @cached_property\n def field(self):\n return forms.ModelChoiceField(\n queryset=Question.objects.all(),\n widget=self.widget,\n required=self._required,\n )\n\n def value_for_form(self, value):\n if isinstance(value, User):\n return value.pk\n else:\n print("selected q:",value)\n selectedqval=value\n print("selected qvalue:",selectedqval)\n return value\n\nclass ConditionsAnswerBlock(blocks.ChooserBlock):\n widget = Select\n class Meta:\n icon = "question"\n\n @cached_property\n def target_model(self):\n return Choice\n\n @cached_property\n def field(self):\n choice=Choice.objects.all()\n return forms.ModelChoiceField(\n queryset=choice,\n widget=self.widget,\n required=self._required,\n )\n\n def value_for_form(self, value):\n if isinstance(value, User):\n return value.pk\n else:\n return value\nRun Code Online (Sandbox Code Playgroud)\n\n现在,无论问题选择如何,我都会获得所有答案选项
\n据我了解,这是无法通过wagtail或Django直接实现的。这实际上是一个 HTML 问题。
Wagtail 和 Django 使用纯 HTML/CSS 来创建其 UI 元素。这些 UI 元素使用表单提交与pythonwagtail/django 中的代码进行交互。HTML这意味着使用POST请求。
与代码交互的另一种方法python是使用重定向,即GET请求。但这样你就无法访问 UI 元素。
首先,您可以为每个答案组设置隐藏的选择字段。在这种情况下,有两个选择字段,其中一个是凯美瑞和陆地巡洋舰,另一个是思域和雅阁。
然后,您必须编写一些javascript代码来在触发问题选择事件时显示/隐藏以及所需的选择字段。您可以在中搜索事件触发器HTML以获取更多信息。
表单提交后,您可以读取问题的值以及相应答案字段的值。
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |