如何为其子模型在Django中具有多个外键的父模型创建输入页面?

如何为其子模型在Django中具有多个外键的父模型创建输入页面?,django,django-forms,modelform,formset,inline-formset,Django,Django Forms,Modelform,Formset,Inline Formset,我正在尝试使用Django设计一个单一的输入页面,允许在一个地方输入关于客户的所有信息。我的客户可以有多个地点。每个地点不仅对其客户,而且对联系人和客户经理都有一个外键(地点总共有3个外键)。客户、地点、联系人和客户经理都是模型;除了我前面提到的位置上的外键外,它们都有几个文本和布尔字段 理想情况下,输入页面将允许用户输入单个客户,同时创建多个新位置,并为每个位置创建新联系人和客户经理,或者选择现有联系人或客户经理 规划此输入页面设计的最佳方式是什么?我应该看看ModelForms和Inline

我正在尝试使用Django设计一个单一的输入页面,允许在一个地方输入关于客户的所有信息。我的客户可以有多个地点。每个地点不仅对其客户,而且对联系人和客户经理都有一个外键(地点总共有3个外键)。客户、地点、联系人和客户经理都是模型;除了我前面提到的位置上的外键外,它们都有几个文本和布尔字段

理想情况下,输入页面将允许用户输入单个客户,同时创建多个新位置,并为每个位置创建新联系人和客户经理,或者选择现有联系人或客户经理

规划此输入页面设计的最佳方式是什么?我应该看看ModelForms和InlineFormset吗?还是我应该从头开始创建一个新的Django表单?还是基于几个Django表单的表单集


我没有提供任何代码,因为我对确切的实现不太感兴趣,而对如何解决这个问题更感兴趣,但如果需要,我可以提供细节;让我知道。更高层次的建议是非常感谢的。提前谢谢。

我会怎么做:

因为您处理的是模型,所以ModelForm最简单,因为它会自动检查模型中提供的参数,如
max\u length
,等等

既然你有这么多外键,而且因为我不知道每个模型有多少字段(尽管听起来你有很多)。。。为了简化代码,如果我是你,我会为要创建的客户创建一个视图。为什么?因为那是你的父模型,而另一个模型没有它就不可能存在

之后,我将创建一个单独的视图,允许新客户一次添加一个新位置,并设置适当的联系人和AccountManager,因为正如您所说,他们可以添加任意数量的联系人和AccountManager。如果您同时执行所有操作,则在同一页面上显示X个额外表单,以便他们填写更多位置、联系人和AccountManager表单,则用户可能会出现更多错误。把事情分开有助于减少这种情况。因为您没有显示任何代码,所以我不能说更多,因为我不知道其他模型字段中的哪些是必需的,甚至不知道您有多少个,但听起来像是很多字段

更多评论:

两个独立视图(一个用于父视图,另一个用于子视图)的缺点是,您有更多的查询,查找每个对象所需的时间更长,虽然可以忽略,但重要的是要围绕尽可能少的请求进行优化

好处是对用户来说清晰明了,所以他们知道一次需要做一件事,而且您编写代码也更容易,因为您不必使用其他潜在型号的X编号。假设您有一位客户,其他型号各有10台,您希望在一个视图中收集所有产品。。。为此编写函数要困难得多

如果您在此处输入一些自己的代码,这将非常有帮助,因为我觉得您好像想在他们的地址、电话和位置上制作一张收据,如果我是对的,您可以轻松地在客户模型中输入联系人和位置的一些字段。或者甚至可以将客户模型中的一些字段设置为一些默认位置和联系人字段,然后如果用户需要更多,则为他们提供视图,让他们创建一个额外的位置、联系人和AccountManager