Meine App mit DB-Klasse,

class invoice(db.Model):
   location_code = db.StringProperty()
   invoice_no = db.IntegerProperty()
   product_tax_rate = db.FloatProperty()
   basic_tax_rate = db.FloatProperty()
   addl_tax_rate = db.FloatProperty()
   .
   .
   .

In diesem Fall wollte ich den Wert von product_tax_rate als Standardwert für die Eigenschaft der Eigenschaft basic_tax_rate festlegen, wenn der Wert von addl_tax_rate ist 0 .

Wie kann ich in dieser Klassenmethode eine generische Prozedur für diese Logik hinzufügen?

Bitte lassen Sie mich wissen, wenn Sie diese Anforderung immer noch nicht erhalten.

0
Niks Jain 6 Okt. 2012 im 13:37

3 Antworten

Beste Antwort

Sie können NDB und ComputedProperty verwenden, um so etwas zu tun ::

class invoice(ndb.Model):
   product_tax_rate = ndb.ComputedProperty(lambda self: self.basic_tax_rate if self.addl_tax_rate == 0 else ???)
   basic_tax_rate = ndb.FloatProperty()
   addl_tax_rate = ndb.FloatProperty()
2
Shay Erlichmen 6 Okt. 2012 im 10:44

Führen Sie dies einfach manuell in dem Code aus, in dem Sie neue Instanzen Ihrer Entität erstellen. Oder überschreiben Sie den Konstruktor (aber das klingt so, als würde es Sie nur zu weiteren Debugging-Rätseln führen).

0
Guido van Rossum 7 Okt. 2012 im 04:25

Sie können einen Modell-Hook verwenden: https://developers.google.com/ appengine / docs / python / ndb / entity # hooks

Durch Definieren eines Hooks kann eine Anwendung Code vor oder nach einer Art von Operationen ausführen. Beispielsweise kann ein Modell vor jedem get () eine Funktion ausführen.

Wenn addl_tax_rate also 0 ist, benötigen Sie nur eine Logik, die die Werte entsprechend festlegt, wenn das Modell in den Datenspeicher gestellt wird. Etwas wie:

def _pre_put_hook(self):
if self.addl_tax_rate == 0:
    self.basic_tax_rate = self.product_tax_rate

Dieser Code wird nicht getestet.

1
Paul Collingwood 6 Okt. 2012 im 09:47