【发布时间】:2018-07-20 08:49:06
【问题描述】:
我想知道如何处理来自 FormView 类的 GET 或 POST 请求以呈现GET 的未绑定表单并将表单发布到POST 的数据库并随后重定向到成功页面(信息消息)。
GET 和 POST 方法使用什么模板以及如何在重定向到成功 URL 后包含消息?
views.py:
from django.shortcuts import render,redirect,render_to_response,get_object_or_404
from django.forms import ModelForm
from django.views import View
from django.views.generic.edit import CreateView
from .forms import MyPlaceForm
from .models import Place
from django.urls.base import reverse_lazy
from django.contrib import messages
#Ceate your class-based views here.
class MapView(View):
def get(self, request):
'Display map'
return render(request,template_name='index.html')
# Handling forms with class-based view
class PlaceFormView(View):
form_class = MyPlaceForm
initial = {'key': 'value'}
template_name = 'name.html'
# Provide Blank Form if GET request
def get(self, request, *args, **kwargs):
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form': form})
# Provide a message if POST request
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
success_url=reverse_lazy('success')
if form.is_valid():
# <process form cleaned data>
messages.add_message(request, messages.INFO, 'Hello world.')
return reverse_lazy(success_url)
return render(request, self.template_name, {'form': form})
urls.py:
from django.contrib import admin
from django.http import HttpResponse
from django.urls import path
from addismap.views import MapView,PlaceFormView
urlpatterns=[
path('map/',MapView.as_view()),
path('place/', PlaceFormView.as_view(), name='post-place'),
path('place/success/',PlaceFormView.as_view(), name='success')
]
【问题讨论】:
-
您没有使用 FormView。如果你是,所有这些代码都会为你完成。
-
Daniel Roseman 能否提出修改建议?
-
从 FormView 继承,删除你的 get 和 post 方法。