【发布时间】:2014-10-09 15:16:32
【问题描述】:
我有一个向默认用户模型添加额外属性的模型
class Perfil(models.Model):
usuario = models.OneToOneField(User)
telefono = models.CharField(max_length=140,null=True,blank=True)
departamento = models.ForeignKey(Departamento,null=True,blank=True)
menus = models.ManyToManyField(Menu,null=True,blank=True)
def __unicode__(self):
return self.usuario.username
我有 ModelForms 来创建一个新用户
class UsuarioForm(ModelForm):
class Meta:
model = User
fields = ("username","password","first_name","last_name","email","is_active",)
class PerfilForm(ModelForm):
class Meta:
model = Perfil
exclude = ("usuario",)
我的视图看起来像这样。
def nuevo_usuario(request):
if request.method == 'POST':
form = UsuarioForm(request.POST, prefix='user')
form2 = PerfilForm(request.POST, prefix='perfil')
if form.is_valid() * form2.is_valid():
menus = request.POST.getlist("perfil-menus")
user = User.objects.create_user(username=request.POST.get("user-username",""),email=request.POST.get("user-email",""),password=request.POST.get("user-password",""))
user.first_name = request.POST.get("user-first_name","")
user.last_name = request.POST.get("user-last_name","")
user.is_active = request.POST.get("user-is_active","True")
user.save()
perfil = Perfil()
perfil.usuario = user
perfil.telefono = request.POST.get("perfil-telefono","")
perfil.departamento = Departamento.objects.get(pk=request.POST.get("perfil-departamento",""))
perfil.save()
men = Menu.objects.filter(pk__in=menus)
for m in men:
perfil.menus.add(m)
form = UsuarioForm(prefix='user')
form2 = PerfilForm(prefix='perfil')
else:
form = UsuarioForm(prefix='user')
form2 = PerfilForm(prefix='perfil')
return render(request,'nuevousuario.html',locals())
在这个方法中,我只用一个简单的方式渲染表单
<form id="form" method="post" action=''>{% csrf_token %}
<table>
{{form}}
{{form2}}
</table>
<p><input type="submit" value="Registrar"/></p>
</form>
但是我想用一些数据填充输入值来编辑用户,但不仅是用户,我还需要编辑“Perfil”值。
注意:“菜单”字段在 HTML 中显示为
对不起,西班牙代码,我在一家拉丁公司工作。
【问题讨论】:
-
你的问题是什么?您想使用用户信息创建表单以进行编辑?
-
为什么直接从 POST 数据中设置对象的值,而不是从表单中清除数据? Django 还提供了一个 UserCreationForm。
-
这是正确的@HasanRamezani,我想填写表格进行编辑。
-
我不知道如何使用 UserCreationForm @Brandon,有什么区别?
-
不同之处在于,通过直接从 POST 数据设置值,您绕过了表单类提供的所有验证。永远不要相信用户提交的数据。我的建议是看看
contrib.auth.forms
标签: django django-models django-forms