Hallo Community,
ich komme seit Stundenlangem suchen nicht weiter -.-
Also ich habe nun folgendes Problem:
Ich habe ein Model A (Benutzerprofil Tabelle )welches von Model B (Benutzertabelle) abhängig ist und beide sind mittels einem Foreignkey verbunden.
Nun erstelle ich mit Model A eine Form (ModelForm). Also eine Benutzerprofil Seite wo der Benutzer in der Lage sein soll, seine Persönlichen Daten zu ersetzen / ändern etc.!
Nun bekomme ich beim Speichern der angegebenen Daten die Probleme. Und zwar sind beide Tabellen / Models mit einem Foreignkey verbunden (Attribut user_id)!
Nun möchte ich das Attribut User Id der Tabelle mittels einer Session variable user id abspeichern. Das geht aber leider nicht da die Daten per POST übertragen werden und dort die User id natürlich nicht mit bei ist sondern in der session variable.
Also nachdem das Script form.is_valid() ausführt bricht er ab und erklärt mir das User Id nicht leer sein darf => Was ja auch richtig ist. Was kann ich tun der ganzen Form Geschichte mitzuteilen das die user id nicht mittels einer POST Übermittlung kommt sondern eben in der Session variable ist?!
Mit initial und dem ganzen Quark hat es leider nicht geklappt
Ich hoffe ihr könnt den Text verstehen ^^
Lg
Alex / Berliner
[Django] ModelForm mit Foreignkey
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
User ID aus der form lassen (exclude). Später dann einfügen, wenn die form valide ist. Oder nicht direkt speichern, sondern anschließend den User einfügen:
Code: Alles auswählen
form.save(commit=False)
form.user = ...
form.save()
-
- User
- Beiträge: 25
- Registriert: Montag 8. Dezember 2008, 19:32
Hallo Jens,jens hat geschrieben:User ID aus der form lassen (exclude). Später dann einfügen, wenn die form valide ist. Oder nicht direkt speichern, sondern anschließend den User einfügen:Code: Alles auswählen
form.save(commit=False) form.user = ... form.save()
auch diese Methode versuchte ich vorgestern, aber leider ging damit auch nichts!
Ich bekomme folgende Fehlermeldung
Code: Alles auswählen
Exception Value:
Cannot assign "2 (User Id => Der Session wert)": "UserProfile.userId (Benutzerprofil Tabelle)" must be a "User (Benutzer Tabelle)" instance.
Nun ohne deinen Code zu sehen, wird dir keiner helfen können/wollen. Warum sollen wir raten was du falsch machst -_-
EDIT:// btw es ist sinnvoll einfach die exception zu pasten und nicht darin rumzumurksen…
EDIT:// btw es ist sinnvoll einfach die exception zu pasten und nicht darin rumzumurksen…
Zuletzt geändert von apollo13 am Donnerstag 3. September 2009, 13:09, insgesamt 1-mal geändert.
-
- User
- Beiträge: 25
- Registriert: Montag 8. Dezember 2008, 19:32
Ich konnte es mir zwar nicht vorstellen, aber du hast recht. Es muss das gesamte User Objekt sein!jens hat geschrieben:Ich kann auch nur raten. Du hast die ID des User aus der Session und übergibst die *Nummer*.
Versuche es doch einfach anhand der ID Nummer den User aus der DB zu holen und übergibst dann das User Objekt.
Vielen dank. Habe für diese Kleinigkeit wirklich viele Tage gebraucht -.-
Naja nun kann es ja weitergehen
Lg
Alex / Berliner
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Wobei im Grunde für die DB die User ID reicht. Denn die ID ist gleich dem pk und im Grunde wird ja eh nur der gespeichert.
Mein Code war auch IMHO falsch. Glaube so könnte es gehen:
Mein Code war auch IMHO falsch. Glaube so könnte es gehen:
Code: Alles auswählen
instance = form.save(commit=False)
instance.user = ...
instance.save()
btw wenn man nur die id zur Hand hat:
sollte auch gehen
Code: Alles auswählen
instance.user_id = 3
-
- User
- Beiträge: 25
- Registriert: Montag 8. Dezember 2008, 19:32
Also so funktioniert es
Wobei request.user das gesamte User Objekt ist!
Gebe ich hinter profile.userId eine Zahl an oder die Session variable, erklärt mir der Compiler wieder das er ein User Objekt benötigt
Code: Alles auswählen
profile = setForm.save(commit=False);
profile.userId = request.user;
profile.save()
Gebe ich hinter profile.userId eine Zahl an oder die Session variable, erklärt mir der Compiler wieder das er ein User Objekt benötigt
das ist klar, wobei ich hoffe du hast dein atrribut nicht wirklich profile.userId genanntBerlinerMC hat geschrieben: Gebe ich hinter profile.userId eine Zahl an oder die Session variable, erklärt mir der Compiler wieder das er ein User Objekt benötigt
Code: Alles auswählen
class Dummy()
user = ForeignKey
c = Dummy()
c.user = user_instance
# die zeile über mir und unter mir sollten mehr oder weniger das gleiche bewirken
c.user_id = user_instance.pk # über das user_id bin ich mir nicht sicher, vlt heißt es wie jems sagte user_pk, aber gehen tut es so auch...