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.
3 Antworten
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()
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).
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.
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.