Здравствуйте. У меня возникла проблема с выводом нескольких форм на одну страницу в Django-проекте.
У меня есть продукт, который нужно отобразить на странице с помощью DetailView и на этой же странице должны быть две формы, позволяющие создать два разный объекта.
Пока у меня вот что получилось, но не работает:
Views.py:class ProductDetails(DetailView, CreateView):
model = Product
template_name = 'product/product_detail.html'
form_class = PhoneCompanyMessageForm
second_form_class = TextCompanyMessageForm
success_url = '/'
mess_type = True #if true, then Text, else Phone message
def get_queryset(self):
qs = super(ProductDetails, self).get_queryset()
return qs.select_related("categories")
def get_context_data(self, **kwargs):
context = super(ProductDetails, self).get_context_data(**kwargs)
if 'form' not in context:
context['form'] = self.form_class()
if 'form2' not in context:
context['form2'] = self.second_form_class()
return context
def form_invalid(self, **kwargs):
return self.render_to_response(self.get_context_data(**kwargs))
def post(self, request, *args, **kwargs):
self.object = self.get_object()
if 'form' in request.POST:
form_class = self.get_form_class()
form_name = 'form'
else:
form_class = self.second_form_class
form_name = 'form2'
self.mess_type = False
form = self.get_form(form_class)
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(**{form_name: form})
def form_valid(self, form):
instance = form.save(commit=False)
instance.company = self.object.company
instance.product = self.object
instance.mess_type = self.mess_type
instance.save()
return HttpResponseRedirect('/')
forms.py:class PhoneCompanyMessageForm(forms.ModelForm):
class Meta:
model = ProductCompanyMessage
fields = ['sender_name',
'phone',
]
def __init__(self, *args, **kwargs):
super(PhoneCompanyMessageForm, self).__init__(*args, **kwargs)
for key in self.fields:
self.fields[key].required = True
class TextCompanyMessageForm(forms.ModelForm):
class Meta:
model = ProductCompanyMessage
fields = ['sender_name',
'text',
'email',
]
def __init__(self, *args, **kwargs):
super(TextCompanyMessageForm, self).__init__(*args, **kwargs)
for key in self.fields:
self.fields[key].required = True
template:<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="form" value="Submit" />
</form>
<form method="post">
{% csrf_token %}
{{ form2.as_p }}
<input type="submit" name="form2" value="Submit" />
</form>
Продукт отображается, при нажатии сабмитов на формах делается редирект на страницу без содержимого. страница /products/, хотя все редиректы ведут к '/'
Используется версия Django 1.6
Заранее спасибо.