姜戈。简单的 FormView 不保存

Django. Simple FormView not saving

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

您需要更改视图的 form_valid 方法,因为 FormView class 不会调用 form.save() 而只是将用户重定向到成功 url.

def form_valid(self, form):
    form.save()
    return super(EditarPerfil, self).form_valid(form)

虽然,我同意@Filly 的回答。如果要创建新对象,请使用 CreateView,否则,请使用 UpdateView.

你走对了!但是 FormView 不会保存您的模型,如 documentation 所示:

A view that displays a form. On error, redisplays the form with validation errors; on success, redirects to a new 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