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

Set*_*eth 4 django django-generic-views

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

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

我有这样的事情:

class AddProductForm(forms.Form): 
    product = forms.IntegerField()
    quantity = forms.IntegerField()
Run Code Online (Sandbox Code Playgroud)

还有这个:

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'),
Run Code Online (Sandbox Code Playgroud)

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

Wog*_*gan 6

我担心你不能在你的urlconf中这样做.您提供的任何callable都不能接受任何参数,因此您将无法获得值?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')
Run Code Online (Sandbox Code Playgroud)