如何更新模型 modelforms 和 django
How update models modelforms and django
我在尝试更新模型 usuario 的数据时遇到问题
这是我的模型
class Usuario(models.Model):
user = models.ForeignKey(User)
nombres = models.CharField(max_length = 50)
correo = models.EmailField()
class Meta:
db_table = u'utp_users'
def __str__(self):
return str(self.nombres.encode('utf-8') )
这是mi表格。 py
class UsuarioForm(forms.ModelForm):
class Meta:
model = Usuario
fields = ['nombres','correo']
我的url
url(r'^menu/update/(?P<usuario_id>\d+)$', 'utpapp.views.update'),
这是我的观点更新
@login_required(login_url='/')
def update(request,usuario_id):
form = UsuarioForm(request.POST)
if form.is_valid():
user = Usuario.objects.get(pk=usuario_id)
form = UsuarioForm(request.POST, instance = user)
form.save()
return redirect('/menu/')
else:
user = Usuario.objects.get(pk = usuario_id)
form = UsuarioForm(instance=user)
return render_to_response('form.html',{ 'form':form }, context_instance=RequestContext(request))
我正在做的模板
<a title="Editar informacion" href="/menu/update/{{usuario.id}}"><img src="/media/imagenes/usuario.png" class=" col-xs-3 col-md-7 quitar-float" alt="Editar informacion" ></a>
问题是当我 select 选项更新时我得到了这个 msj "Page not found (404)"
但我在模板 href {{usuario.id}} 中更改为 {{user.id}} 是可行的,但用户不同,这是什么问题??
您忘记将 usuario
变量传递给模板。
试试这个,你需要将usuario
作为上下文传递给模板,这样可以简化代码(尤其是GET/POST的形式,它们基本上是相同的形式,所以不要'重复它)就像:
from django.shortcuts import get_object_or_404
@login_required(login_url='/')
def update(request,usuario_id):
user = get_object_or_404(Usuario, pk=usuario_id)
form = UsuarioForm(request.POST or None, instance=user)
if request.method == 'POST' and form.is_valid():
form.save()
return redirect('/menu/')
# you need to pass `usuario` as part of the context to template
# so you can access usuario.id in template
return render_to_response('form.html',{ 'form':form, 'usuario': user }, context_instance=RequestContext(request))
还要确保你有 /menu/
的 url
路线,否则 redirect
会让你 404
。
我在尝试更新模型 usuario 的数据时遇到问题
这是我的模型
class Usuario(models.Model):
user = models.ForeignKey(User)
nombres = models.CharField(max_length = 50)
correo = models.EmailField()
class Meta:
db_table = u'utp_users'
def __str__(self):
return str(self.nombres.encode('utf-8') )
这是mi表格。 py
class UsuarioForm(forms.ModelForm):
class Meta:
model = Usuario
fields = ['nombres','correo']
我的url
url(r'^menu/update/(?P<usuario_id>\d+)$', 'utpapp.views.update'),
这是我的观点更新
@login_required(login_url='/')
def update(request,usuario_id):
form = UsuarioForm(request.POST)
if form.is_valid():
user = Usuario.objects.get(pk=usuario_id)
form = UsuarioForm(request.POST, instance = user)
form.save()
return redirect('/menu/')
else:
user = Usuario.objects.get(pk = usuario_id)
form = UsuarioForm(instance=user)
return render_to_response('form.html',{ 'form':form }, context_instance=RequestContext(request))
我正在做的模板
<a title="Editar informacion" href="/menu/update/{{usuario.id}}"><img src="/media/imagenes/usuario.png" class=" col-xs-3 col-md-7 quitar-float" alt="Editar informacion" ></a>
问题是当我 select 选项更新时我得到了这个 msj "Page not found (404)"
但我在模板 href {{usuario.id}} 中更改为 {{user.id}} 是可行的,但用户不同,这是什么问题??
您忘记将 usuario
变量传递给模板。
试试这个,你需要将usuario
作为上下文传递给模板,这样可以简化代码(尤其是GET/POST的形式,它们基本上是相同的形式,所以不要'重复它)就像:
from django.shortcuts import get_object_or_404
@login_required(login_url='/')
def update(request,usuario_id):
user = get_object_or_404(Usuario, pk=usuario_id)
form = UsuarioForm(request.POST or None, instance=user)
if request.method == 'POST' and form.is_valid():
form.save()
return redirect('/menu/')
# you need to pass `usuario` as part of the context to template
# so you can access usuario.id in template
return render_to_response('form.html',{ 'form':form, 'usuario': user }, context_instance=RequestContext(request))
还要确保你有 /menu/
的 url
路线,否则 redirect
会让你 404
。