Django:“反转”表单上的多对多关系

时间:2010-10-07 17:36:16

标签: django django-forms

我所谈论的那种关系中最简单的例子是Django的用户和群组之间的关系。 User表有一个ManyToMany字段作为其定义的一部分,Group表是“反向”。

关于我的约束的说明:我根本不使用Admin界面,也不是一个选项。

现在,关于编程问题。我需要编写一个用于编辑MyGroup实例的表单,其定义如下:

class MyGroup( Group ):
  some_field = models.CharField( max_length=50 )

我希望能够拥有一个表单页面,我可以在其中编辑some_field以及哪些用户是该组的成员。因为我正在使用模型,所以ModelForm似乎很明显。但我无法弄清楚如何让Django包含用户,因为它位于User-Group关系的反面。理想情况下,我希望显示小部件用于指定用户类似于指定管理员用户和组页面上的权限的用户。

2 个答案:

答案 0 :(得分:0)

inline-formsets

为外键关系做诀窍。

 GroupUserInlineFormSet = inlineformset_factory(MyGroup, User, form=PurchaseOrderEditForm, max_num=100, extra=2, can_delete=False)

 guformset = GroupUserInlineFormSet (instance=mygroup)

可能会指出你正确的方向。不确定这如何适用于多种关系。

答案 1 :(得分:0)

我从未找到过这样做的好方法。我最终编写了自定义表单来管理创建字段并在其上指定适当的查询集。

对于问题的显示部分,有一种方法可以在常规页面上使用SelectFilter(a.k.a。水平过滤器)。我找到的一页说明是here,还有另一页有帮助,但我似乎无法重新找到它。

我正在考虑为这个过程的两个部分编写一份更全面的指南。如果有人有兴趣请告诉我,它会给我推动实际完成它。