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的。 –