0
我在Django有点新,我试图从表单中提取用户信息,当我尝试这种形式的信息保存到数据库中出现问题,因为它得到的用户信息是从默认的用户模型,但该模型被保存(“Mensaje”)与扩展用户模型我使用(称为“Usuario”)一个外键关系,所以当我试图把表单信息到模型的引擎发生故障。如何在Django 1.9中使用自定义的传统用户身份验证?
我尝试触摸尽可能少的兼容性着想的默认选项,但我找不到我的问题的正确答案,因为大多数问题/答案是过时的。这里是我的代码:
#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.
任何帮助,将不胜感激,谢谢提前。
非常感谢,正是我需要的,我觉得不会让人不看东西,所以很明显,我还需要学习很多关于Django的。 –