Seite 1 von 1

[Django] Zum Queryset Daten hinzufügen

Verfasst: Donnerstag 10. Juli 2008, 08:54
von .robert
Guten Morgen,

folgende Situation:
Ich speichere Werte in einer Tabelle. Als Beispiel hier mal Zahlenpaare. Mein Ziel ist es, eine Tabelle zu erzeugen, in der in den ersten beiden Spalten die Zahlen und in der Dritten irgendein Ergebnis aus einer Berechnung mit den beiden Zahlen stehen,
also in etwa so:

Code: Alles auswählen

<table>
<tr><td>A</td><td>B</td><td>A+B</td></tr>
<tr><td>3</td><td>5</td><td>8</td></tr>
[...]
</table>
Ich dachte mir das ich dafür ja schön die Genreric Views nutzen kann, die Django anbietet, leider habe ich aber noch nicht herausgefunden wie ich die 3te Spalte, die in der Datenbank nicht vorhanden ist, hinzufügen kann.
Das muss ja irgendwo in der view-funktion passieren:

Code: Alles auswählen

def Myview(request):
     list = Mymodel.objects.all()
    #hier irgendwie list manipulieren
    return object_list(request, queryset=list)
So funktioniert es leider nicht:

Code: Alles auswählen

for elem in list:
    elem["c"] = ...
Das extra_context-Dictionary ist leider auch keine Lösung, da ich auf die Werte in dem Template nicht vernünftig zugreifen kann, oder kennt da jemand eine Lösung?
Das Template sieht ja ungefähr so aus:

Code: Alles auswählen

<table>
    {% for elem in object_list %}
    <tr>
        <td>{{elem.a}}</td>
        <td>{{elem.b}}</td>
        <td>/*hier müsste dann irgendwie auf das _passende_ element aus dem extra_context zugegriffen werden</td>
    </tr>
    {% endfor %}
</table>
Also, nach dem ganzen Bla Bla:
weiß jemand, wie ich
a) dem Queryset neue Daten hinzufügen kann, oder
b) in dem Template so auf den extra_context zugreifen kann, das ich immer den passenden Wert erhalte?

Meine beiden letzten Fallback-möglichkeiten wären, das ich entweder nicht die generic_views nutze, oder das ich die benötigte Spalte schon in das Model integriere.
Es wiederstrebt mir, Daten doppelt zu speichern, weswegen mir die extra Spalte in der Tabelle nicht ganz geheuer ist (wenn ich A und B schon gespeichert habe, habe ich dadurch ja auch A+B),
und die Generic Views würde ich wegen der vielen Hilfsmittel, die sie anbieten (pagination etc), gerne nutzen.

danke,
r.

Re: [Django] Zum Queryset Daten hinzufügen

Verfasst: Donnerstag 10. Juli 2008, 10:23
von apollo13
.robert hat geschrieben:Also, nach dem ganzen Bla Bla:
weiß jemand, wie ich
a) dem Queryset neue Daten hinzufügen kann, oder
Nein, dass willst du nicht tun ;) Wenn schon bekommt ldas model eine Methode dafür:

Code: Alles auswählen

class Mymodel(models.model):
  field_a = models.SomeField()
  field_b = models.AnotherField()
  def calculate_extra(self):
     retun self.field_a + self.field_b #simplified
Im Template kannst du dann einfach mit object.calculate_extra auf den Wert zugreifen...
b) in dem Template so auf den extra_context zugreifen kann, das ich immer den passenden Wert erhalte?
Nein Du kannst dir aber einen Templatetag schreiben, der die 2 Werte nimmt, addiert und wieder ausgibt: http://www.djangoproject.com/documentat ... es_python/

MfG apollo13

Verfasst: Donnerstag 10. Juli 2008, 10:39
von .robert
Ui, auf die Idee, die Berechnung in das Model zu packen (wo sie ja eigentlich auch hingehört :oops: ) bin ich gar nicht gekommen.
So funktioniert es natürlich wunderbar.

Vielen Dank!
:D

Re: [Django] Zum Queryset Daten hinzufügen

Verfasst: Donnerstag 10. Juli 2008, 15:22
von mitsuhiko
apollo13 hat geschrieben:Wenn schon bekommt ldas model eine Methode dafür:

Code: Alles auswählen

class Mymodel(models.model):
  field_a = models.SomeField()
  field_b = models.AnotherField()
  def calculate_extra(self):
     retun self.field_a + self.field_b #simplified
Bitte noch ein @property oben drauf, dann siehts auch schicker in Python und jeder Template Engine != Django aus :)

Re: [Django] Zum Queryset Daten hinzufügen

Verfasst: Donnerstag 10. Juli 2008, 16:13
von apollo13
mitsuhiko hat geschrieben:Bitte noch ein @property oben drauf, dann siehts auch schicker in Python und jeder Template Engine != Django aus :)
Du meinst jetzt x.some_stuff vs x.some_stuff()? Klar, aber er verwendet nur Django ;)

Re: [Django] Zum Queryset Daten hinzufügen

Verfasst: Donnerstag 10. Juli 2008, 16:21
von .robert
apollo13 hat geschrieben:Klar, aber er verwendet nur Django ;)
Das hört sich ja an als ob das ein Verbrechen wär... :wink:

Re: [Django] Zum Queryset Daten hinzufügen

Verfasst: Donnerstag 10. Juli 2008, 22:04
von apollo13
Nein definitiv nicht, auch Django hat seine use cases und ist vor allem für CRUD Sachen super und einfach. Aber du wirst vlt. einmal merken, dass ein Framework (und zwar egal welches), dich immer irgendwo limitiert und schlussendlich (vor allem bei großen Systemen) die Nachteile meist überwiegen.