这似乎应该显而易见,但解决方案正在逃避我。通常我会写一个简单的视图函数,它会填充一个合适的表单并将其传递给视图,但解决方案感觉非常接近..
我有一张表格。我想使用我在网址中捕获的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
传递的聪明的可调用者可以为我制作表格?)
答案 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')