Бывает необходимо объединить в одном шаблоне FormView и DetailView.
Порыв интернет нашел рабочее решение на stackoverflow.com
# forms.py
from django import forms
class MyForm(forms.ModelForm):
class Meta:
model = ModelFormView
fields = '__all__'
# views.py
from django.views.generic import DetailView, FormView
class MyDetailView(DetailView):
template_name = 'MyTemplate.html'
model = ModelDetailView
def get_object(self):
...
def get_context_data(self, **kwargs):
context = super(MyDetailView, self).get_context_data(**kwargs)
context['myform'] = MyForm
return context
class MyFormView(FormView):
form_class = MyForm
def get_success_url(self):
item = self.request.POST['item']
...
ModelFormView.objects.create(
item=item,
...
)
return '/'
# MyTemplate.html
...
<form method="post" action="{% url "myform" %}">{% csrf_token %}
{{ myform }}
<input type="submit" value="Отправить" class="btn btn-default"/>
</form>
...
# urls.py
from django.views.decorators.http import require_POST
urlpatterns = patterns('',
...
url(r'^detailview/$', MyDetailView.as_view()),
url('^formview/$', require_POST(MyFormView.as_view()), name='myform'),
...
)
Если у кого есть более красивые решения, например что-то типа как тут: djangoproject.com делитесь!
Комментарии