Django - Wie man ein Formular für ein Modell ist Fremdschlüssel?
Hier ist, was ich versuche zu tun. Ich Frage mich, ob jemand vorschlagen kann, ist ein guter Ansatz:
models.py:
class Color(models.Model):
name = models.CharField(...
class Speed(models.Model):
name = models.CharField(...
class Dog(models.Model):
name = models.CharField(...
color = models.ForeignKey(Color...
speed = models.ForeignKey(Speed...
class DogRequest(models.Model):
dog = models.ForeignKey(Dog...
request_time = models.DateTimeField()
Nun möchte ich eine Seite haben, wo ein Benutzer eingeben kann, oder Bearbeiten ein DogRequest, aber die form sollte wie folgt Aussehen:
Enter Dog Request:
---------------------
color (dropdown V)
speed (dropdown V)
|save|
Also wie würde ich das design, die form in den Blick? Das problem ist, der Benutzer die Eingabe von Eigenschaften eines Hundes, aber nicht ein Hund. Also muss ich suchen oder erstellen Sie einen Hund aufnehmen je nach dem was der Benutzer eingibt.
Bisher habe ich versucht, so etwas wie dieses:
class DogRequestForm(ModelForm):
class Meta:
model = DogRequest
fields = ('request_time','color','speed')
color = forms.ModelChoiceField(queryset=Color.objects.all())
speed = forms.ModelChoiceField(queryset=Speed.objects.all())
Davon aus, dass auch funktioniert, wo muss ich den code herauszufinden, den Hund aufnehmen zu verwenden (oder anlegen), je nachdem, was eingegeben für Farbe und Geschwindigkeit? Und wie fülle ich das Formular aus einem DogRequest?
InformationsquelleAutor Greg | 2011-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass Sie verwenden möchten, eine ModelForm hier. Es wird nie gültig sein, ohne einige Hack, da Sie nicht gefunden oder erstellt das Hund-Objekt vor dem Aufruf
is_valid()
.Statt, ich würde nur verwenden einen regelmäßigen form, und überschreiben Sie die Methode save DogRequest zu finden oder zu erstellen, der Hund.
Update: Antwort auf die Nachfolge-Frage in den Kommentar, die ich noch nicht getestet, aber so ähnlich sollte es funktionieren.
dann, wenn Sie erstellen eine Instanz dieser form für Ihre Ansicht Bearbeiten, die Sie benötigen, um zu instanziieren es mit so etwas wie dies:
wo füllen Sie die aktuellen
dog_request_id
,dog_color
unddog_speed
aus Ihrer bestehendenDogRequest
Objekt.Yep, das klingt wie eine gute Lösung für mich.
Gibt es eine einfache Möglichkeit, fügen Sie ein verstecktes Feld? Die Methoden, die auf SO schaute, mühsam und verworren.
Haben Sie versucht, editable=False erstellen ein verstecktes Feld? Sie können den Wert Bearbeiten, in die Sie sich ansehen können, aber es wird nicht in der form. docs
InformationsquelleAutor Sean W.