将使用捕获的url参数创建的表单传递给通用django视图?

时间:2009-12-17 00:35:02

标签: django django-generic-views

这似乎应该显而易见,但解决方案正在逃避我。通常我会写一个简单的视图函数,它会填充一个合适的表单并将其传递给视图,但解决方案感觉非常接近..

我有一张表格。我想使用我在网址中捕获的object_id来实例化此表单,然后使用extra_context参数将其发送到我的模板。

我有这样的事情:

class AddProductForm(forms.Form): 
    product = forms.IntegerField()
    quantity = forms.IntegerField()

和此:

url(r'^products/(?P<object_id>\d+)/$', 
    'django.views.generic.list_detail.object_detail',
    {'queryset': Product.objects.all(),
    'extra_context': {'form': AddProductForm({'product': <what?>, 'quantity': 1})},
    name='product_detail'),

有没有办法用捕获的<what?>值替换上面的object_id? (也许在extra_context传递的聪明的可调用者可以为我制作表格?)

1 个答案:

答案 0 :(得分:6)

我担心你不能在你的urlconf中这样做。您提供的任何可调用对象都不能接受任何参数,因此您将无法获得?P<object_id>的值。

然而,您可以在自己的视图中重复使用通用视图来减少必须编写的样板量:

from django.views.generic.list_detail import object_details
from your.forms import AddProductForm
from your.models import Product

def about_pages(request, object_id=None):
    qs = Product.objects.all()
    f = AddProductForm({'product':object_id,'quantity':1})
    return object_details(request,queryset=qs,extra_context={'form':f},template='yourtemplate.html')