Django - Formularfeld mit Variablen Inhalt füllen und ausblenden

Django, Flask, Bottle, WSGI, CGI…
Antworten
MikeAlt
User
Beiträge: 3
Registriert: Dienstag 23. Februar 2016, 17:52

Hallo,
ich versuche mich seit neuem mit dem Framework vertraut zu machen. Bin aber definitiv ein blutiger Anfänger.
Mein erstes Projekt ( reine Spielerei ) sieht für meine Verhältnisse schon recht passabel aus. Ich stecke aber gerade bei einem Thema fest, wobei mir auch die sonst gute Doku nicht weiterhilft, oder ich es nicht verstehe.
Ich habe zwei DB Tabellen die mit Foreign verknüpft sind.
Meine models.py

Code: Alles auswählen

class Aktien(models.Model):
    wkn_int = models.CharField(max_length=20, default='')
    wkn_nat = models.CharField(max_length=20, default='')
    name = models.CharField(max_length=100, default='')

    def __str__(self):
        return f"{self.wkn_int} {self.wkn_nat} {self.name}"

class Values(models.Model):
    datum = models.DateField()
    wkn_int = models.ForeignKey(Aktien, on_delete=models.CASCADE )
    order_type = (
        ('Dividende', 'Dividende'),
        ('Kauf', 'Kauf'),
        ('Verkauf', 'Verkauf')
    )
    order = models.CharField(max_length=9, choices=order_type, default="Dividende")
    betrag = models.DecimalField(max_digits=8, decimal_places=2)

    def __str__(self):
        return self.wkn_int
 
In der Listendarstellung bekomme ich dann alle Aktien aufgelistet.
Wenn ich dann die einzelne Aktie aufrufe, bekomme ich diese mit den ganzen Transaktionen angezeigt.
Das klappt prima und damit bin ich erst mal zufrieden.
In dieser Ansicht habe ich ein Formular, in dem ich neue Transaktionen eingeben möchte.
Meine forms.py

Code: Alles auswählen

class OrderForm(forms.ModelForm):
    class Meta:
        model = Values
        fields = "__all__"        
        widgets = {
            'datum':forms.DateInput(attrs={'type':'date'}),
            }
# Create custom widget for input data in Date fields
class DateInput(forms.DateInput):
    input_type = 'date'
In meinem Fall werden nun die 4 Felder im Formular angezeigt. Das Foreign Feld wird als Dropdown mit allen Aktien angezeigt, die in der Tabelle sind. Zum abspeichern muss ich dann die betroffene Aktie auswählen, und kann dann erst speichern.
Hier würde ich gerne das Feld mit der aktuell ausgewählten Aktie vorbelegen dass ich diese nicht immer auswählen muss. Mit "initial" habe ich es nicht hinbekommen. Wäre auch cool wenn ich das Feld mit dem richtigen Wert gar nicht mehr angezeigt bekomme.

Ich denke dass die Profis hier im Forum nur mit dem Kopf schütteln, aber wie gesagt sind es meine ersten Schritte.
Es wäre schön wenn ich hier den richtigen Tip bekomme wie ich so etwas bewerkstelligen kann.

Vielen Dank für eure Hilfe.

Gruß Mike
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MikeAlt: Anmerkung bezüglich der Namen: Die Klassen sollten in der Einzahl beschrieben werden. Die `Aktien`-Klasse modelliert *eine* Aktie und die `Values`-Klasse *einen* Wert. Beziehungsweise für *eine* Transaktion, weshalb die Klasse wohl auch besser `Transaktion` heissen sollte.

Was sind denn `wkn_int` und `wkn_nat`? Die Wertpapierkennnummer hat ja 6 Stellen. Und die internationale Variante 12 — wobei die WKN da drin enthalten ist. Und die sind jeweils „unique“ — was sich auch in der Modell-Definition widerspiegeln sollte. Leere Zeichenketten als Default machen auch nur Sinn wenn das tatsächlich so erlaubt ist, das man eine Aktie mit leeren Zeichenketten für diese Informationen haben kann, was eher unwahrscheinlich ist.

`Transaktion.wkn_int` sollte nicht so heissen. Das ist `Transaktion.aktie`.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
MikeAlt
User
Beiträge: 3
Registriert: Dienstag 23. Februar 2016, 17:52

Hallo blackjack,
danke für dein Feedback. Mir ist schon klar dass ich mit meinen ersten Versuchen nicht gleich alles richtig mache. Auch was die Modellierung der Daten angeht. Was die WKN und ISIN angeht muss ich leider widersprechen. Die WKN ist nicht generell in der ISIN enthalten. Dies ist nur im Königreich Deutschland der Fall. Bei internationalen Aktien / Fonds etc ist das nicht der Fall. Aber egal.
Vielleicht hast du ja noch eine Idee wie ich mein Problem lösen kann, also das mit den Formularfeldern.
Das wäre prima.
LG
Mike
Antworten