我是django通用FormView的新手。我遗漏了一些明显的东西,表格正确呈现,但它没有保存数据:
forms.py
from perfiles.models import Perfil
class FormEditarPerfil(forms.ModelForm):
class Meta:
model = Perfil
fields = ('descripcion',)
views.py
from django.views.generic.edit import FormView
from forms import FormEditarPerfil
class EditarPerfil(FormView):
template_name = "perfiles/editar_perfil.html"
form_class = FormEditarPerfil
def get_success_url(self):
url = reverse_lazy('perfiles:propio', kwargs={'username': self.request.user.username})
return url
答案 0 :(得分:2)
您需要更改视图的form_valid
方法,因为FormView
类不会调用form.save()
,而只是将用户重定向到成功网址。
def form_valid(self, form):
form.save()
return super(EditarPerfil, self).form_valid(form)
虽然,我同意@ Filly的回答。如果您要创建新对象,请使用CreateView
,否则请使用UpdateView
。
答案 1 :(得分:2)
你走在正确的道路上!但FormView
无法保存您的模型,因为documentation表示:
显示表单的视图。出错时,重新显示表单 验证错误;成功时,重定向到新的URL。
您正在寻找UpdateView
。这样您就不需要创建单独的表单,只需在视图中使用fields
属性:
from django.views.generic.edit import UpdateView
from perfiles.models import Perfil
class EditarPerfil(UpdateView):
template_name = "perfiles/editar_perfil.html"
model = Perfil
fields = ['descripcion']
def get_success_url(self):
url = reverse_lazy('perfiles:propio', kwargs={'username': self.request.user.username})
return url