Найти - Пользователи
Полная версия: Как можно передать форму в шаблон используя CBV ?
Начало » Django » Как можно передать форму в шаблон используя CBV ?
1
Saturn
Подскажите, как можно передать класс готовой формы в моем случае.
Есть класс (форма) UserRegisterForm(), как эту форму можно передать через ProductDetailView ?

class ProductDetailView(MyTest, DetailView):   
#    model = Product
    queryset = Product.objects.select_related().prefetch_related("colors","sizes")
    context_object_name = "product"
    template_name = "product1.html"
adw0rd

Через get_context_data можно что угодно передать, в том числе и форму. А что за форма вообще? Может стоит FormView использовать вам?

Saturn
Спасибо, действительно можно через get_context_data.
adw0rd
А что за форма вообще? Может стоит FormView использовать вам?
Я так и сделаю в дальнейшем отдельный FormView для регистрации.
А возможно CommentFormView передать в ProductDetailView ?
class CommentFormView(FormView):
    template_name = "product1.html"
    form_class = CommentForm
    success_url = ''
    def form_valid(self, form):
        return super(CommentFormView, self).form_valid(form)
Saturn
Передал форму
context['form'] = UserRegisterForm()
где в форму указал action=“”
но при Submit даже не проверяет данные и перенаправляет на пустую страницу.
Видимо что то не то сделал.
А как правильно тогда должно быть?
FishHook
Либо
1. У DetailView есть get. Если форма передается гетом, там проверяй на валидность и сейвь
2. А вообще лучше сделать наоборот, то есть класс наследовать от FormView или ProcessFormView, а в контекст пихать инстанс, который детализируешь
3. Ну или миксовать ModelFormMixin и DetailView или FormView и SingleObjectMixin
Saturn
FishHook спасибо, а можно небольшой пример для лучшего понимания, для 2 пункта.

Вот не пойму почему queryset не срабатывает
http://ccbv.co.uk/projects/Django/1.4/django.views.generic.edit/BaseCreateView/

class CommentFormView(MyTest, CreateView):
   context_object_name = "product"
    template_name = "product1.html"
    form_class = UserRegisterForm
    queryset = Product.objects.select_related().prefetch_related("colors", "sizes")
    success_url = ''
    
    def form_valid(self, form):
        return super(CommentFormView, self).form_valid(form)  
FishHook
Мне кажется, у Вас запрос неправильный, попробуйте
queryset = Product.objects.all()
FishHook
Saturn
а можно небольшой пример для лучшего понимания, для 2 пункта.
Ну как то так

class Foo(FormView):
    template_name='template'
    form_class=Form
    success_url='url'
    def form_valid(self, form):
        form.save()
        return super(Foo, self).form_valid(form)
    def get_context_data(self, **kwargs):
        context=super(Foo, self).get_context_data(**kwargs)
        context['detailed_instance']=Model.objects.get(pk=self.kwargs['pk'])
        return context
        
Saturn
FishHook
Мне кажется, у Вас запрос неправильный, попробуйте
queryset = Product.objects.all()
Пробовал, но что то не выходило.
Дак я через get_context_data сделал аналогично Вашему примеру.
class CommentFormView(MyTest, CreateView):
    template_name = "product1.html"
    form_class =  CommentForm
    success_url = ''
    def get_context_data(self, **kwargs):
        context = super(CommentFormView, self).get_context_data(**kwargs)
        context['product'] = Product.objects.select_related().get(id=self.kwargs.get(self.pk_url_kwarg, None))
        return context
        
#    def get_object(self):
#        return Product.objects.select_related().get(id=self.kwargs.get(self.pk_url_kwarg, None))
    def form_valid(self, form):
        form.save()
        return redirect(self.request.META['HTTP_REFERER'])
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB