2

我有 3 个模型:Company、Project 和 Contact 与各自的关系:

Company-Project (M2M) 
Project-Contact (M2M) 
Company-Contact (OneToMany)

我有一个人们用来创建公司的大表单,它还应该让用户在不提交表单的情况下即时添加项目和联系人。

我设法为 M2M 字段移植了 Django Admin 的动态模型创建按钮(那个小绿色加号)。因此,在创建公司时,用户可以单击项目附近的绿色加号字段,会出现一个弹出窗口,让他创建一个项目实例。当他单击弹出窗口上的提交时,弹出窗口关闭,原始表单的项目框用新的项目数据刷新。

对于 OneToMany 关系,通常用户在使用组合框创建位于“Many”一侧的模型时选择关系的“One”部分,如果您创建 Contact 模型然后选择ContactForm 中预先创建的 Company 实例。

问题是,我试图在公司创建表单中为这种关系设置一个反向字段。所以理想情况下应该有一个空白的联系人字段(新公司,还没有联系人),右侧有一个绿色加号,当用户点击它时,将打开一个新的弹出窗口并让他创建联系人。

我能想出的唯一解决方案是在联系人中添加一个 temp_uuid 字段,这样当创建 CompanyForm 的新实例时,它会被分配一个 uuid,然后每次用户单击绿色加号并创建一个联系人时,它会将表单的 uuid 分配给联系人的 temp_uuid 字段(我们可以称之为伪外键,不是吗?)。这样,在创建之后,我就可以在表单的字段中填充该公司的联系人,即使该公司尚未创建。提交表单后,我会将公司的 pk 分配给每个联系人的外键并保存。

我敢打赌有更好的方法来做到这一点。此外,项目在 App Engine 上运行并使用 django-nonrel,因此对 JOIN 的任何使用都是毫无疑问的。

4

0 回答 0