Ich bin etwas neu in Django, und ich versuche, Benutzerinformationen aus einem Formular zu extrahieren, das Problem tritt auf, wenn ich versuche, diese Formularinformationen in die Datenbank zu speichern, da die Benutzerinformationen vom Standardbenutzermodell stammen. aber das gespeicherte Modell ("Mensaje") hat eine Fremdschlüsselbeziehung mit dem erweiterten Benutzermodell, das ich benutze ("Usuario" genannt), so dass die Engine fehlschlägt, wenn ich versuche, die Formularinformationen in das Modell zu schreiben.Wie benutze ich einen benutzerdefinierten Heritaged User als Authentifizierung in Django 1.9?
Ich versuche aus Kompatibilitätsgründen so wenig wie möglich von den Standardoptionen zu berühren, aber ich kann nicht die richtige Antwort für mein Problem finden, da die meisten Fragen/Antworten veraltet sind. Hier ist mein Code:
#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
Die Ansicht, dass mir Kopfschmerzen schenken:
#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})
Und schließlich die Form, dass die Ansicht unter Verwendung:
#forms.py
class FormularioContacto(forms.ModelForm):
class Meta:
model = Mensaje
fields = ('tit_msj', 'descripcion_msj', 'email',)
Ich denke, das Beste, was zu Das wäre das erweiterte Benutzermodell ("Usuario"), das für die Authentifizierung verwendete Modell, aber ich stecke hier fest.
Für alle Interessierten, hier ist der Fehler, den Motor werfen:
Cannot assign "<SimpleLazyObject: <User: admin>>": "Mensaje.id_usr" must be a "Usuario" instance.
Jede Hilfe würde geschätzt, Dank im Voraus.
Vielen Dank, genau das, was ich brauchte, ich fühle mich beschämt, dass ich nichts so Offensichtliches sehe, ich muss noch viel über Django lernen. –