模型复选框,两个提交按钮:将人员模型添加到组模型,从组模型中拒绝人员模型

时间:2010-01-25 17:51:48

标签: django django-models django-forms

我多次在Django上看过formset和model formset,但我仍然无法想出这样做的聪明方法。

我有两种模式:

Group

Person

我有一个查询集,其中包含所有尝试加入特定组的人:Person.objects.filter(wantsToJoinGroup=groupD)

现在,我想要做的是显示一个页面,每个人想要加入特定组的一侧有一个复选框。然后可以检查这些复选框,然后单击“接受组”按钮。我希望这可以将这些人批量添加到某个群体中。

我不明白该怎么做才是复选框。我一直试图扩展modelform,然后从中formset,但我每次都失败了。好像我想用模型做formset我应该使用modelformset,但这不允许我扩展表单以添加复选框。我该怎么办?

这是关于我想要的油漆的10秒草稿:

alt text http://img403.imageshack.us/img403/1002/draft.png

所以它基本上是一个复选框和一种在模板上访问人物模型的方法,然后是在视图上处理此模型的方法。

提前致谢!

修改顺便说一下,在有人建议使用ModelMultipleChoiceField之前,除非有办法访问模板中的每个对象,否则这将无法满足我的需求去做。据我所知,我不能在模板上迭代ModelMultipleChoiceField的对象。如果我错了,请纠正我!

3 个答案:

答案 0 :(得分:1)

如果你没有使用模型形式的想法,我会使用一个带有ModelMultipleChoiceField的常规表单,在__init__中为它提供一个查询集,然后将相同的查询集提供给模板上下文(在你的闲暇时间迭代):

#view
def add_to_group(request):
    persons = Person.objects.filter(wantsToJoinGroup=groupD)
    if request.POST:
        form = PersonAddForm(persons, request.POST)
        if form.is_valid():
            #your handling logic
    form = PersonAddForm(persons)
    context = {'persons': persons, 'form': form}
    return render_to_response(template, context)

#form
class PersonAddForm(forms.Form):
    def __init__(self, queryset, *args, **kwargs):
        super(PersonAddForm, self).__init__(*args, **kwargs)
        self.fields['persons'] = forms.ModelMultipleChoiceField(queryset=queryset,
                                     widget=forms.CheckboxSelectMultiple() )

答案 1 :(得分:1)

您实际上可以通过以下方式访问ModelMultipleChoiceField的项目:

my_field.field.queryset

其中my_field是ModelMultipleChoiceField的实例。

答案 2 :(得分:0)

在我的头顶,你可以插入一个名为'Action'的隐藏字段。在“接受”和“拒绝”按钮的onclick事件中,相应地设置隐藏字段的值,然后提交表单。

在您的视图中,检查隐藏字段的值,以确定它是接受还是拒绝。