我正在尝试使用 Django 设计一个单一的输入页面,该页面允许在一个地方输入有关客户的所有内容。我的客户可以有多个位置。每个位置不仅有一个外键给其客户,还有一个联系人和客户经理的外键(位置总共有 3 个外键(。客户、位置、联系人和客户经理都是模型;除了我已经提到的位置上的外键之外,它们都有几个文本和布尔字段。
理想情况下,输入页面将允许用户输入单个客户,同时创建多个新位置,并为每个位置创建新的联系人和客户经理 - 或者可以选择现有的联系人或客户经理。
规划此输入页面设计的最佳方法是什么?我应该查看ModelForms和InlineFormsets吗?还是我应该从头开始创建一个新的 Django 表单?还是基于多个 Django 表单的 Formset?
我没有提供任何代码,因为我对确切的实现不感兴趣,而是对如何处理这个问题感兴趣,但如有必要,我可以提供详细信息;让我知道。非常感谢更高级别的建议。提前谢谢你。
我会做什么:
由于您正在处理模型,因此ModelForm将是最简单的,因为它会自动检查模型中提供的参数,例如max_length
等。
而且由于您有这么多外键,并且因为我不知道每个模型有多少个字段(尽管听起来您有很多(......为了简化代码,如果我是你,我会为要创建的客户制作一个视图。为什么?因为那是你的父模型,没有它,另一个模型就无法存在。
之后,我会制作一个单独的视图,以允许该新客户一次添加一个新位置,并设置适当的联系人和客户经理,因为就像您说的,他们可以添加任意数量的联系人和客户经理。如果您一次完成所有操作,则在同一页面上显示 X 个额外表单供他们填写更多位置、联系人和客户经理表单更有可能收到更多用户错误。将事情分开可以帮助减少这种情况。由于您没有显示任何代码,因此我不能说更多,因为我不知道其他哪些模型字段是必需的,甚至不知道您有多少个模型字段,但这听起来像很多字段。
更多评论:
2 个独立视图(一个用于父视图,另一个用于子视图(的缺点是,您有更多的查询,这需要更长的时间才能找到每个对象,尽管可以忽略不计,但围绕优化尽可能少的请求进行设计非常重要。
好处是用户清晰,所以他们知道一次需要做一件事,而且你也更容易编写代码,因为你不必采用X个其他潜在模型。假设您有一个客户,其他型号各有 10 个,并且您希望将所有模型收集在一个视图中......为此编写函数会困难得多。
如果您在此处放置一些自己的代码会很有帮助,因为在我看来,您想制作带有他们的地址、电话和位置的收据,如果我是对的,您可以轻松地将联系人和位置中的一些字段放入客户模型中。或者,甚至可以将客户模型中的一些字段设置为一些默认位置和联系人字段,然后如果用户需要更多字段,请为他们提供视图,让他们创建额外的位置、联系人和客户经理。