Formvariable in View an model übergeben? -Django-

Django, Flask, Bottle, WSGI, CGI…
Antworten
djangothoto
User
Beiträge: 24
Registriert: Freitag 10. September 2010, 10:12

Hallo Experten,

ist es irgendwie möglich eine im View ausgelesene Formvariable (durch request.Post.get...) in einem Model in models.py zu verwenden?

lg djangothoto
Nobody is perfect!
BlackJack

@djangothoto: Die Frage ist etwas zu allgemein gehalten. Welchen Wert willst Du wie in einem Model verwenden? Und was meinst Du mit "einem Model in models.py"? Dort werden die Model-Klassen üblicherweise definiert, aber die Exemplare davon existieren ja nicht in dem Modul, sondern da wo man sie erstellt oder wo Funktionen/Methoden aufgerufen werden, die solche Exemplare als Rückgabewerte haben.
djangothoto
User
Beiträge: 24
Registriert: Freitag 10. September 2010, 10:12

Ich probiere es mal etwas deutlicher zu erklären:

Ich habe eine Form, welche folgendes Attribut besitzt:

Code: Alles auswählen

kosteniter = forms.DecimalField()
Dieses lese ich mittels folgenden Code in meiner view ein:

Code: Alles auswählen

if configform.is_valid():
...
kosten = request.POST.get('kosteniter')
Nun ist meine Frage ob ich dieses 'kosteniter', welches mir hier zurückgegeben wird, in einer Funktion meiner Modelklasse verwenden kann um damit beispielsweise zu rechnen?

Ich hoffe jetzt ist meine Frage besser formuliert!

lg
Nobody is perfect!
BlackJack

@djangothoto: Hatten wir den Zugriff auf Form-Daten nicht schonmal? Warum gehst Du über `request.POST`, wenn Du doch ein `form` mit den Werten hast!?

Zur eigentlichen Frage: Wenn Du etwas in einer Methode verwenden willst, muss es entweder Teil des Objekts sein, oder als Argument übergeben werden. Wenn Du solche Fragen stellst, solltest Du vielleicht vorher oder nebenher unabhängig von Django ein wenig Grundlagen über objektorientierte Programmierung lernen.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@djangothoto: Ich vermute mal du hast das Django Tutorial noch nicht durch, oder? Wäre besser du arbeitest das erstmal ab. Dann dürften sich einige Fragen von selbst klären...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
djangothoto
User
Beiträge: 24
Registriert: Freitag 10. September 2010, 10:12

Hallo Leute,
erstmal hab ich mir das Tutorial angeschaut und durchgemacht!
Mit dem Tutorial hatte ich keine größeren Probleme.

Ich möchte eigentlich ein Attribut, aus meiner views.py welches von meiner Form stammt, und per request.Post.get ausgelesen wird zum berechnen hernehmen.
forms.py

Code: Alles auswählen

kosteniter = forms.DecimalField()
views.py

Code: Alles auswählen

kosten = request.POST.get('kosteniter')
#...
#erg = somethingelse * kosten
# hierbei ist zu beachten, dass somethingelse ein wert von meiner Modelklasse ist, der bei jedem Objekt in meiner Modelklasse unterschiedlich sein kann
Soweit funktioniert das auch!
Das Problem ist, dass ich diese Berechnung für alle Objekte in meiner Modelklasse machen möchte.

Wenn ich nun mit einer for-schleife über alle Objekte iteriere und sie berechnen lassen möchte, gibt mir mein return entweder den letzten berechneten Wert zurück, da die vorherigen überschrieben werden, oder der return gibt mir eine liste von allen berechneten Werten zurück.
So berechnet sich das ganze gerade:

Code: Alles auswählen

ergebnis = [kosten * 300 * Modelklasse.somethingelse for Modelklasse in Modelklasse.objects.all()]
Das doofe an der Sache ist, dass wenn ich mein ergebnis jetzt mit

Code: Alles auswählen

return render_to_response('path/meintemplate.html', {'ergebnis':ergebnis})
ausgeben lasse, es mir für alle Objekte der Modeklasse die berechneten Ergebnisse in einer liste ausgibt.

Deshalb hatte ich gefrag ob man evtl. 'kosten' in seine Modelkasse in models.py übergeben kann um jeden Wert genau dem Objekt zuzuordnen zudem es gehört.

So soll es am Ende aussehen:

Objekt1 (erg)=1200
Objekt2 (erg)=2000

und nicht so:

Objekt1 (erg)=[1200, 2000]
Objekt2 (erg)=[1200,2000]

Ich hoffe ihr hilft mir! (Ich weiss ich bin blutiger Anfänger aber ich habe in keinem tutorial oder in keinem Codeschnippsel etwas vergleichbares gefunden)

Vielen Dank
djangothoto
Nobody is perfect!
BlackJack

@djangothoto: Na dann erstell doch einfach eine Liste die nicht nur das Ergebnis der Multiplikation enthält, sondern ein Tupel aus Objekt und dem zugehörigen Ergebnis.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

djangothoto hat geschrieben:

Code: Alles auswählen

kosten = request.POST.get('kosteniter')
Du solltest die Daten nicht direkt verwenden! form validieren und auf clean data zugreifen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten