Django的。简单的FormView不保存

时间:2015-08-13 02:53:07

标签: python django django-models django-forms

我是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

2 个答案:

答案 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