遇到了与这里描述的问题完全相同的问题:https://github.com/wagtail/wagtail/issues/7344#issue-946329708,但在我的情况下,修复似乎不起作用。
基本上,我有一个自定义的ChooserBlock,它可以将模型的给定实例绑定到StructBlock。如果"ChooserBlock"值为空或不为空,则渲染的工作方式会有所不同,因此它实际上可以为空非常重要。
但当空白时,我在尝试保存时结结巴巴地发现了这个错误:
字段"id"需要一个数字,但得到了"。
错误的堆栈与我上面链接的github问题中描述的堆栈完全相同。
我尝试了给定的解决方案,但似乎没有任何区别,至少对我的问题来说是这样。
class CommunityChooserBlock(blocks.ChooserBlock):
target_model = Community
widget = forms.Select
# Return the key value for the select field
def value_for_form(self, value):
if value == "":
return None
else:
return super().value_from_form(value)
我错过什么了吗?
编辑:我还试图覆盖get_prep_value
和clean
方法,但它没有改变任何内容。
def get_prep_value(self, value):
if value == '':
return None
else:
super().get_prep_value(value)
def clean(self, value):
if value == '':
value = None
super().clean(value)
更新:我无法找到合适的修复方案,所以我改变了计划,选择了一个带有动态选择列表的ChoiceBlock,如下所述:https://stackoverflow.com/a/60979072/13934028.
它似乎对我的情况很好