Передать форму, созданную с захваченными параметрами url, в общее представление django? - PullRequest
4 голосов
/ 17 декабря 2009

Кажется, что должно быть очевидным, но решение ускользает от меня. Обычно я просто написал бы простую функцию представления, которая заполнила бы соответствующую форму и передала бы ее представлению, но решение кажется таким близким ..

У меня есть форма. Я хочу создать экземпляр этой формы, используя object_id, который я записал в URL, а затем отправить его в мой шаблон с помощью параметра 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 Ответ

6 голосов
/ 17 декабря 2009

Боюсь, вы не можете сделать это в вашем 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')
...