я не разработчик, а продакт менеджер. И вот пилю свой pet-product, столкнулся с проблемой,
У меня есть DetailView, которая наследована от FormMixin, что позволяет мне вывести в шаблон одну форму.
Но я никак не могу понять как мне вывести в шаблон произвольное количество форм... Ну вот сколько нужно, столько и вывести.
Рендерить формы - не проблема, я передаю их через context, тут всё ок. Но как их потом обрабатывать в методе post?
Например, если я сабмичу одну форму, то обрабатывалась именно она, если сабмичу другую, то другая и т.д.
Работать в дальнейшем планирую именно с Class Based Views, поэтому решение желательно бы для этого подхода.
Помогите, пожалуйста.
Вьюшка:
class ProductResearchDetailView(LoginRequiredMixin, FormMixin, generic.DetailView):
model = ProductResearch
form_class = ResearchStageFormModal
template_name = 'product_research/product_research_detail.html'
context_object_name = 'product_research'
def get_success_url(self):
return reverse('product-research:product-research-detail', kwargs={'pk': self.object.pk})
def get_queryset(self, *args, **kwargs):
# проверка на права доступа в качестве создателя объекта
return super(ProductResearchDetailView,
self).get_queryset(*args, **kwargs).filter(product_manager_id=self.request.user.productmanager)
def get_form(self, form_class=None):
# метод для перехвата формы, чтобы передать user.product_manager для фильтрации поля select
if form_class is None:
form_class = self.get_form_class()
return form_class(user=self.request.user.productmanager,
category_of_research=self.get_object().category_of_research,
**self.get_form_kwargs())
def post(self, request, *args, **kwargs):
# метод, который используется для формы в модальном окне
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
# метод для проставления объекту скрытых полей: создателя, менеджера продукта и других
post_save = form.save(commit=False)
post_save.product_manager = self.request.user.productmanager
post_save.research = self.get_object()
post_save.save()
return super(ProductResearchDetailView, self).form_valid(form)
def get_context_data(self, **kwargs):
context = super(ProductResearchDetailView, self).get_context_data(**kwargs)
research_stage_set = ResearchStage.objects.filter(research_id=self.kwargs.get('pk'))
context['form'] = self.get_form()
context['research_stage_set'] = research_stage_set
context['research_pattern_set'] = ResearchPattern.objects.filter(product_manager_id=self.request.user.productmanager)
return context
Есть другой чат джангистов, там народу побольше и поактивнее, мне кажется там быстрее ответят (Django [ru] который)
Ок, большое спасибо за наводку! 😉👍
Обсуждают сегодня