在 Django 表单集中过滤对象

Posted

技术标签:

【中文标题】在 Django 表单集中过滤对象【英文标题】:Filter Objects in a Django Formset 【发布时间】:2011-11-04 16:14:45 【问题描述】:

我正在使用 inlineformset_factory 来生成一个表单集:

FormSet = inlineformset_factory(Model1, Model2, extra=0)
if request.method =="POST":
    formset = FormSet(request.POST, instance=model1_object)
    if formset.is_valid():
        formset.save()
        return HttpResponseRedirect( reverse-blah )
else:
    formset = PupsFormSet(instance=model1_object,)
return render_to_response("template.html", "formset":formset, 'model1_object':model1_object,context_instance=RequestContext(request)) 

我有两个问题

    如何限制 Model2 对象,以便不是所有适用的对象都存在,而只存在过滤的子集? 有没有人有任何使用基于类的视图和表单集的示例代码?

更新了功能代码回答问题 #1

FormSet = inlineformset_factory(Model1, Model2, extra=0)
if request.method =="POST":
    formset = FormSet(request.POST, instance=model1_object, queryset=Model2.objects.filter(foo=bar))
    if formset.is_valid():
        formset.save()
        return HttpResponseRedirect( reverse-blah )
else:
    formset = PupsFormSet(instance=model1_object, queryset=Model2.objects.filter(foo=bar))
return render_to_response("template.html", "formset":formset, 'model1_object':model1_object,context_instance=RequestContext(request))

【问题讨论】:

【参考方案1】:

这会有帮助吗? https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-queryset

基本上,在创建表单集时尝试使用 queryset kwarg。

【讨论】:

效果很好...... queryset 参数必须进入 formset = Formset() 调用而不是 inlineformset_factory 调用,所以我已经用那个答案更新了我的问题

以上是关于在 Django 表单集中过滤对象的主要内容,如果未能解决你的问题,请参考以下文章

使用多选表单在 DJANGO 中过滤

Django:从查询集中删除过滤条件

如何在查询集中动态设置 Django 过滤器

在 Django 查询集中动态定义过滤器参数

Django:在查询集中过滤 get_foo_display

基于 Django 查询集中外键字段的 .count() 进行过滤