Django-Nonrel ManyToOne模型即时创建

时间:2011-06-04 15:24:39

标签: django django-admin django-forms django-nonrel django-models

我有3个模型:公司,项目和联系人各自的关系:

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

我有一个人们用来创建公司的大表格,而且它应该让用户添加项目&即时联系,无需提交表格。

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

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

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

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

我敢打赌,有更好的方法可以做到这一点。此外,项目在App Engine上运行并使用django-nonrel,因此任何使用JOIN都是不可能的。

0 个答案:

没有答案