Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как можно передать форму в шаблон используя CBV ? [RSS Feed]

#1 Авг. 13, 2012 21:02:25

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Как можно передать форму в шаблон используя CBV ?

Подскажите, как можно передать класс готовой формы в моем случае.
Есть класс (форма) 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"



Офлайн

#2 Авг. 13, 2012 22:12:48

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Как можно передать форму в шаблон используя CBV ?

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




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Офлайн

#3 Авг. 13, 2012 23:08:56

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Как можно передать форму в шаблон используя CBV ?

Спасибо, действительно можно через 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)



Офлайн

#4 Авг. 14, 2012 10:11:21

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Как можно передать форму в шаблон используя CBV ?

Передал форму

context['form'] = UserRegisterForm()
где в форму указал action=“”
но при Submit даже не проверяет данные и перенаправляет на пустую страницу.
Видимо что то не то сделал.
А как правильно тогда должно быть?



Офлайн

#5 Авг. 14, 2012 10:20:19

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как можно передать форму в шаблон используя CBV ?

Либо
1. У DetailView есть get. Если форма передается гетом, там проверяй на валидность и сейвь
2. А вообще лучше сделать наоборот, то есть класс наследовать от FormView или ProcessFormView, а в контекст пихать инстанс, который детализируешь
3. Ну или миксовать ModelFormMixin и DetailView или FormView и SingleObjectMixin



Офлайн

#6 Авг. 14, 2012 10:50:21

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Как можно передать форму в шаблон используя CBV ?

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)  



Отредактировано Saturn (Авг. 14, 2012 10:55:42)

Офлайн

#7 Авг. 14, 2012 13:00:53

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как можно передать форму в шаблон используя CBV ?

Мне кажется, у Вас запрос неправильный, попробуйте
queryset = Product.objects.all()



Офлайн

#8 Авг. 14, 2012 13:08:30

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как можно передать форму в шаблон используя CBV ?

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
        



Офлайн

#9 Авг. 14, 2012 21:00:16

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Как можно передать форму в шаблон используя CBV ?

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'])



Отредактировано Saturn (Авг. 14, 2012 21:00:38)

Офлайн

  • Начало
  • » Django
  • » Как можно передать форму в шаблон используя CBV ?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version