2016-05-23 86 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的。 –