Форум сайта python.su
Подскажите, как можно передать класс готовой формы в моем случае.
Есть класс (форма) 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"
Офлайн
Через get_context_data можно что угодно передать, в том числе и форму. А что за форма вообще? Может стоит FormView использовать вам?
Офлайн
Спасибо, действительно можно через get_context_data.
adw0rdЯ так и сделаю в дальнейшем отдельный FormView для регистрации.
А что за форма вообще? Может стоит FormView использовать вам?
class CommentFormView(FormView): template_name = "product1.html" form_class = CommentForm success_url = '' def form_valid(self, form): return super(CommentFormView, self).form_valid(form)
Офлайн
Передал форму
context['form'] = UserRegisterForm()
Офлайн
Либо
1. У DetailView есть get. Если форма передается гетом, там проверяй на валидность и сейвь
2. А вообще лучше сделать наоборот, то есть класс наследовать от FormView или ProcessFormView, а в контекст пихать инстанс, который детализируешь
3. Ну или миксовать ModelFormMixin и DetailView или FormView и SingleObjectMixin
Офлайн
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)
Офлайн
Мне кажется, у Вас запрос неправильный, попробуйте
queryset = Product.objects.all()
Офлайн
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
Офлайн
FishHookПробовал, но что то не выходило.
Мне кажется, у Вас запрос неправильный, попробуйте
queryset = Product.objects.all()
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)
Офлайн