2 Stimmen

Django: Wie man Felddaten aus zwei Modellen in einer Formulardefinition initiiert/erfasst

Ich verwende ein Modelform für Benutzer, um Vorname und Nachname zu bearbeiten, aber ich möchte ein zusätzliches Feld von UserProfile (die eine 1-to-1-Beziehung mit Benutzer hat) hinzugefügt, um diese.

class UserProfileInfoForm(forms.ModelForm):
    """ Profile Model field specifications for edit.
    """
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'user_phonemobile')

    first_name = forms.CharField(
                            label = _('First name'),
                            max_length = 30,
                            required = True
                            )
    last_name = forms.CharField(
                            label = _('Last name'),
                            max_length = 30,
                            required = True
                            )
    user_phonemobile = forms.CharField(
                            label = _('Mobile phone'),
                            max_length = 15,
                            required = False,
                            )

Ich habe das zusätzliche Feld in der ModelForm (und auf der Seite angezeigt), aber ich kann nicht bekommen, es mit dem Wert aus dem anderen Modell (UserProfile) zu füllen. Ich habe versucht, es zu tun, die Unterklasse der init der Modellform, aber bisher ohne Erfolg.

Ich könnte natürlich ein normales Formular erstellen und es in meiner Ansicht wie folgt ausfüllen

userdata  = request.user.get_profile()
data = {
    'first_name': request.user.first_name,
    'last_name': request.user.last_name,
    'user_phonemobile': userdata.user_phonemobile,
    }
profileinfoform = UserProfileInfoForm(data)

Aber wenn ich in Zukunft zusätzliche Felder hinzufüge, habe ich das Gefühl, dass dies meine Ansichtsdefinition unübersichtlich machen wird.

Herzliche Grüße,

Gerard.

1voto

Ben James Punkte 113987

Ich glaube, Sie suchen nach Inline-Formulare . Sie sind für die Arbeit mit verwandten Objekten konzipiert.

1voto

akaihola Punkte 25244

Normalerweise erstelle ich einfach zwei Formulare, eines für jedes Modell. Siehe z. B. diese Nachricht für ein Beispiel.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X