2016-05-23 50 views
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. 

任何帮助,将不胜感激,谢谢提前。

回答

0

变化mensaje.id_usr = request.usermensaje.id_usr = request.user.usuario会修正这个错误。

+0

非常感谢,正是我需要的,我觉得不会让人不看东西,所以很明显,我还需要学习很多关于Django的。 –