Grundsätzlich habe ich ein Modell mit einem ManyToMany-Feld, und dann eine Modellform von diesem Modell abgeleitet, wo das Feld als "Multiple-Choice" -Auswahlfeld gerendert wird. In meiner Vorlage habe ich dieses Feld weggelassen und stattdessen gewählt, um die Werte für dieses Feld in der Ansicht vorzubereiten, dann übergebe diese vorbereiteten Werte an request.POST (eigentlich eine Kopie von request.POST, weil request.POST unveränderlich ist) Fütterung Anfrage.POST auf das Formular und dann weiter wie gewohnt. Ich kann mir nicht vorstellen, wie das geht, denn request.POST ist nicht einfach ein einfaches Python-Wörterbuch, sondern ein QueryDict, das sich etwas anders verhält.Wie erstelle ich einen benutzerdefinierten "list-type" -Eintrag zur Anfrage.POST
Das Feld, das ich ausfüllen muss, heißt "not_bases"
. Wenn ich das Widget unter Verwendung des Formulars erstelle, funktioniert es intern sehr gut, aber nicht auf meine Weise UI-mäßig. Als ich die django-Formular abgeschickt POST Wert über Djangos handliche Debug-Fehlerfenster überprüfen, sieht die Arbeits QueryDict wie folgt aus:
<QueryDict: {u'not_bases': [u'005', u'00AR', u'00F', u'00FD'], [...] }>
es den Wert für "not_bases"
erscheint eine Liste, aber es ist nicht einfach eine Liste. Ich kann nicht einfach .append(), weil es nicht funktioniert. Ich grub um die Dokumentation und fand .update(), die erscheint funktioniert, aber nicht. Hier ist mein Code:
newPOST = request.POST.copy()
for base in bases:
newPOST.update({"not_bases": base.identifier})
und hier ist die Ausgabe:
<QueryDict: {u'not_bases': [u'KMER', u'KYIP'], u'reference': [u''], [...] }>
Aber wenn ich füttern, dass QueryDict auf die Form, erhalte ich eine Form Validierungsfehler, der sagt „not_bases: Geben Sie eine Liste von Werte.". Es ist offensichtlich, dass die listenähnlichen Dinge, die aus der str() -Darstellung des QueryDict kommen, in den beiden obigen Fällen nicht identisch sind, obwohl sie genau gleich aussehen.
Also, wie mache ich das?
Wenn mein Verständnis des Quellcodes korrekt ist, sollten Sie in der Lage sein, .append() zur not_bases-Liste hinzuzufügen. Können Sie bitte klarstellen, was Sie mit "es wird nicht funktionieren" meinen? –
Hacking request.POST ist der falsche Weg, um Ihr Ziel zu erreichen. Ändern Sie stattdessen Ihr Formular, so dass es dieses Feld nicht erfordert, aber den Wert manuell in dem gespeicherten Modell (oder was auch immer Ihr Formular mit den Posted-Daten tut) setzt. –