姜戈。简单的 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
我是 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