我在Django中有点新鲜,而且我试图从表单中提取用户信息,当我尝试将表单信息保存到数据库中时会出现问题,因为它获取的用户信息是来自默认用户模型,但正在保存的模型(" Mensaje")与我使用的扩展用户模型(称为" Usuario")具有外键关系,因此当我发动机时引擎失败尝试将表单信息放入模型中。
为了兼容性,我尝试尽可能少地触摸默认选项,但由于大多数问题/答案都已过时,我找不到正确的答案。这是我的代码:
#app/models.py
class Usuario (models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
segundos = models.IntegerField()
id_ciudad = models.ForeignKey(Ciudad,related_name="Fk1_usuario_ciudad")
def __str__(self):
cadenaMinutos = self.user.first_name + ', tiene acumulados ' + str(int(self.segundos/60))
return cadenaMinutos
class Mensaje (models.Model):
tit_msj = models.CharField(max_length=100)
descripcion_msj = models.TextField()
email = models.EmailField()
f_msj= models.DateTimeField(default=timezone.now)
id_usr = models.ForeignKey(Usuario, related_name="Fk1_mensaje_usr")
def __str__(self):
return self.tit_msj
令我头疼的观点:
#views.py
def contacto(request):
if request.method == "POST":
formulario = FormularioContacto(request.POST)
if formulario.is_valid():
mensaje = formulario.save(commit=False)
if request.user.is_authenticated():
mensaje.id_usr = request.user
mensaje.save()
else:
mensaje.save()
return redirect('exchange.views.gracias', correo=mensaje.email)
else:
formulario = FormularioContacto()
return render(request, 'base/contacto.html',{'form' : formulario})
最后是视图使用的表单:
#forms.py
class FormularioContacto(forms.ModelForm):
class Meta:
model = Mensaje
fields = ('tit_msj', 'descripcion_msj', 'email',)
我认为最好的办法是将扩展的用户模型(" Usuario")用于身份验证的模型,但我已经陷入困境。
对于任何有兴趣的人,这里引发错误:
Cannot assign "<SimpleLazyObject: <User: admin>>": "Mensaje.id_usr" must be a "Usuario" instance.
任何帮助将不胜感激,提前谢谢。
答案 0 :(得分:0)
将mensaje.id_usr = request.user
更改为mensaje.id_usr = request.user.usuario
将解决错误。