2017-03-04 4 views
0

Ich möchte einen Benutzer nach einzelnen Daten in einem einzelnen Feld in einem CreateView fragen und aus diesem Feld die Werte der verbleibenden Modellfelder berechnen.Berechnen von Modellfeldern von

Anstatt sie nach allen Daten zu fragen, kann ich nur nach einer Sache fragen und den Rest berechnen.

Ein einfaches Beispiel:

Model.py

class EggCount(models.Model): 
    crates = models.IntegerField() 
    cartons = models.IntegerField() 
    eggs = models.IntegerField() 

Views.py

class EggCountCreateView(generic.CreateView): 
    model = models.EggCount 
    fields = ['crates'] 
    template_name = 'egg_form.html' 

Die zugehörige Mathematik, dass ich die 'Kartons' und ‚Eier auszufüllen verwenden möchten 'Felder im Modell.

cartons = crates * 50 
eggs = cartons * 12 

Wohin geht diese Mathematik in Django? In dem Modell? Als Teil der form_valid-Funktion in der Ansicht? Sollte ich es getrennt halten, rufe es irgendwie vom Modell oder der Ansicht auf?

Tut mir leid, aber ich bin völlig verloren und habe es schwer, eine klare Antwort auf den besten Ansatz dafür zu finden.

Antwort

0

können Sie versteckte Formularfelder verwenden, wie das in Ihrer egg_form.html

<input type="hidden" name="cartons" value=""> <input type="hidden" name="eggs" value="">

und verwenden Sie Javascript/jQuery Ihre berechnen auszuführen und das Ergebnis im Wertattribut zu speichern.

+0

Danke für die Anregung, Kevin. Ich hoffe, hier Django/Python zu verwenden. Dies ist eine vereinfachte Version dessen, was mein realer Code der Klarheit halber ist. Der reale Code hat bereits mehrere Gleichungen, die ich in Python erstellen möchte. – Dan

0

Ohne den Rest des Codes zu sehen, ich glaube, Sie so etwas wie dies, setzen Sie Ihre mathematischen Funktionen in den Modellen tun müssen, und sie dann aus der Sicht aufrufen und dann alles, was Sie mit ihnen müssen tun:

Modelle .py

class EggCount(models.Model): 
    crates = models.IntegerField() 
    cartons = models.IntegerField() 
    eggs = models.IntegerField() 

    def cartons(self): 
     cartons = self.crates * 50 

    def eggs(self): 
     eggs = self.cartons * 12 

views.py

class EggCountCreateView(generic.CreateView): 
    model = models.EggCount 
    fields = ['crates'] 
    templates_name = 'egg_form.html' 
    # call the functions within the view 
    cartons = model.cartons() 
    eggs = model.eggs() 
    #then you can do something with the results 
+0

Danke @ pasta1020. Dies ist ein interessanter Ansatz. Ich habe etwas Ähnliches gemacht, aber anstatt das Modell hinzuzufügen, habe ich eine services.py-Datei erstellt, die die Gleichungen enthält, und dann wird diese Logik in der Ansicht form_valid aufgerufen. Ich bin offen dafür, Gegenpunkte zu hören, warum dies eine schlechte Übung ist. – Dan