2016-05-23 2 views
0

私はDjangoで少し新しく、フォームからユーザー情報を抽出しようとしていますが、そのフォーム情報をデータベースに保存しようとすると問題が発生します。ユーザー情報はデフォルトのUsersモデルから取得され、保存されているモデル( "Mensaje")には、私が使用する拡張ユーザーモデル(「Usuario」と呼ばれる)との外部キー関係があるため、フォーム情報をモデルに入れようとするとエンジンが失敗します。Django 1.9でカスタムHeritaged Userを認証する方法は?

私は、互換性のためのデフォルトのオプションをできるだけ少なくするようにしていますが、ほとんどの質問/回答が古くなっているため、私は正しい答えを見つけることができません。ここに私のコードは次のとおりです。

#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',) 

私はに最善のことを考えますモデルで拡張されたUserモデル( "Usuario")を認証に使用することはできますが、私はここで取り残されています。興味がある人々のために

、ここでエラーがエンジンのスローです:

Cannot assign "<SimpleLazyObject: <User: admin>>": "Mensaje.id_usr" must be a "Usuario" instance. 

すべてのヘルプは、事前に感謝をいただければ幸いです。

答えて

0

mensaje.id_usr = request.userからmensaje.id_usr = request.user.usuarioに変更するとエラーが修正されます。

+0

ありがとう、私が必要としていただけで、私は何かがとても分かりにくいことに恥ずかしいと感じ、私はまだDjangoについてたくさん学ぶ必要があります。 –

関連する問題