如何在 Django

时间:2021-04-29 14:14:36

标签: django django-views django-forms

我在两个 Django 模型之间建立了多对多关系:团队和成员。一个成员可以是多个团队的一部分。我能够成功地将一个 Form 类绑定到一个 CreateView,并且使用标准的 ModelMultipleChoiceField,可以成功地使用 save_m2m 方法保存该表单。

但是,该字段的默认小部件不适合我的用户体验。我想为每个团队的每个可选成员数量创建一个单独的选择框,而不是使用选项列表。例如,如果团队可以有 7 个成员,我想显示 7 个选择框,而不是一个用户从中选择 7 个不同对象的选择列表。

我知道我可能无法得到完整的答案,但是如果我应该考虑使用自定义 MultiWidget 覆盖 Field,或者使用内联表单集可能是更合适的路线,我将不胜感激。或者,别的……

1 个答案:

答案 0 :(得分:1)

在一天结束时,我最终决定为创建团队表单坚持使用单个 ModelForm。在此 ModelForm 中,我动态创建了每个团队成员数量所需的字段数,并在表单中创建了一个函数来生成这些字段。

我在 ModelForm 的通用清理方法中对这些字段执行验证。我使用模板中的 yield 方法来控制显示各个字段。

我确信这不是最 Django y 的方法,因为许多人似乎在理论上使用 inlineformsets,但这行得通,而且代码似乎并不过分 hacky 或不可维护。