在 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 表单集中过滤对象的主要内容,如果未能解决你的问题,请参考以下文章