@django-yip: Mit „code gestartet” ist gemeint Du solltest mal *Dein* Programm laufen lassen nachdem Du es entsprechend geändert hast das Dir die Datentypen zu den Objekten ausgegeben werden. Zum Beispiel zu `queryset`.
Ich (denke) ich weiss welche Datentypen Du da hast und ich kann nachlesen was man damit machen kann. Das kannst *Du* aber auch. Deine Modelle kenne ich aber nicht, erstens nicht alle Definitionen und zweitens nicht die Semantik und was die einzelnen Modelle und Attribute bedeuten. Da kann man nur raten. Und das ging ja auch schon schief, zum Beispiel wenn man die Annahme trifft das zu einer SIM nur eine Mobilfunknummer gehören kann, da hast Du ja schon widersprochen.
Ich vermute mal das `queryset`-Objekt, welches den Datentyp `QuerySet` hat, fragt `sim`-Exemplare ab. Das habe ich jetzt mal aus der HTML-Überschrift von dem Bildschirmfoto des Adminbereichs abgeleitet. Den Code dazu hast Du nicht gezeigt. So viel zum Code verstecken. Die Definitionen der Modelle enthalten „...” und das Modell `mobilfunknummer` hast Du auch nicht gezeigt. Also kann man hier auch nur Vermutungen anstellen wie das aussehen mag. Das `vertrag.grundtarif` ein Fremdschlüssel in `grundtarife` ist und dieses Modell/diese Tabelle dann ein Attribut/eine Spalte `grundtarif` hat, sieht etwas eigenartig aus.
Mal angenommen das `queryset` fragt tatsächlich `sim`-Exemplare ab, dann kann man von jedem einzelnen durch einfachen Attributzugriff das dazugehörige `mobilfunknummer`-Exemplar abfragen. Wie der Datentyp davon aussieht wissen wir nicht — hast Du nicht gezeigt. Da kann man also nur indirekt etwas drüber sagen, nämlich weil wir durch die Definition von `vertrag`-Modell wissen das `mobilfunknummer`-Exemplare ein `vertrag_set`-Attribut haben müssen, was ein `QuerySet`-Exemplar ist. Man kann darüber also an die Verträge (Mehrzahl!) zu der `mobilfunknummer` kommen. Hier stellt sich jetzt die Frage wieviele Verträge es geben kann für eine `mobilfunknummer`. Wenn es mehr als einen geben kann, dann kann es ja auch mehr als einen zur SIM geben. Falls es nur einen geben kann ist `vertrag.mobilfunknummer` vielleicht etwas zu ”grosszügig” definiert und man wollte da kein `ForeignKey` sondern ein `OneToOne` Feld definieren. Wenn man dann das oder die `vertrag`-Exemplare hat, kann man dort ganz einfach den Grundtarif als Attribut abfragen.
Unter der Voraussetzung das es zu jeder Mobilfunknummer genau einen Vertrag gibt, könnte das ausgeben aller Grundtarife zu den ausgewählten SIMs so aussehen (ungetestet):
Code: Alles auswählen
for sim in queryset:
print sim.mobilfunknummer.vertrag_set.get().grundtarif.grundtarif
Hier sieht man vielleicht auch warum ich `grundtarif` als Attribut/Feld von `grundtarife` komisch finde. Kann es sein dass dieses Feld/die Spalte vielleicht besser `name` oder `beschreibung` heissen sollte?