Was ist der Grund für die Verwendung von _defaults und lambda in python für openerp entwicklung?

Ich habe angefangen zu lernen, für OpenERP Module unter Python Sprache zu entwickeln. Ich habe Quellcode-Beispiele über Internet gesucht und versuche, von meinem eigenen zu lernen. Ich habe bben durch einen Python-Code und bin nicht in der Lage, die Verwendung von _defaults und lambda zu verstehen. Mögen :

_defaults = { 'name': lambda obj, cr, uid, context: '/', 'state': 'draft', } 

Plz gibt ein paar Worte, um ein paar Know-how auf diese beiden zu bekommen.

Hoffnung auf Vorschlag

Vielen Dank

2 Solutions collect form web for “Was ist der Grund für die Verwendung von _defaults und lambda in python für openerp entwicklung?”

_default Wörterbuch wird verwendet, um die Standardwerte der Felder festzulegen. Diese Werte werden standardmäßig beim Erstellen eines neuen Datensatzes von der Benutzeroberfläche angezeigt.

Lambda : Python unterstützt die Erstellung von anonymen Funktionen (dh Funktionen, die nicht an einen Namen gebunden sind) zur Laufzeit mit einem Konstrukt namens "Lambda". Dies bedeutet, dass Sie eine Funktionslaufzeit verwenden können, ohne sie mit einem Namen zu definieren, mit dem ganzen Code in einer Zeile. Nun, in OpenERP können Sie sehen, dass Funktionen einige Argumente wie cr (Datenbank-Cursor), uid, id etc. haben. Mit all dem können Sie auf die Datenbank zugreifen (mit OpenERP's ORM-Methoden). Also, anstatt eine ganze Funktion zu definieren, nur um Standardwerte zu setzen, ist die Lambda-Funktion eine intelligente Wahl. Beispielsweise ,

 _defaults = { 'active': True, 'type': 'general', 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id, } 

Im obigen Code kann company_id auf Lambda gesetzt werden, die die Methode von ORM für die Klasse 'res.users' aufruft, um die ID des loggedin-Benutzers zu erhalten.

Sie können es auf diese Weise auch durch die Definition einer Funktion,

 def _get_default_company(self, cr, uid, context=None): company_id = self.pool.get('res.users')._get_company(cr, uid, context=context) return company_id _defaults = { 'active': True, 'type': 'general', 'company_id': _get_default_company, } 

@ArsalanSherwani: Grundsätzlich können wir auch die Zuordnung ohne Lambda bewerten, lambda sollte nur verwendet werden, wenn wir einige dynamische oder berechnete Werte wünschen, aber wenn du einen statischen Wert zuordnen willst, kannst du direkt als _default zuordnen ist nur ein Dict. Wie Sie wissen, Lambda in Zeile Funktion so anstatt, dass Sie können externe Funktion innerhalb dict, um den Wert zu berechnen, ist dies alles so ziemlich pythonic nur, nichts Besonderes für OpenERP nur besondere Sache über _defaults ist es den Standardwert für Felder gesetzt, wenn Können Sie versuchen, neue Datensätze zu erstellen, wenn Sie auf die Schaltfläche "Erstellen" in der Ansicht klicken, ruft es die _default_get Methoden und default_get Methode in ORM berechnet Werte aus diesem Block und gibt die Werte zurück. So kannst du das Verhalten der _defaults balck Werte auch mit _defulat_Get ändern.

@ArsalanSherwani: in deinem Code

lambda obj, cr, uid, context: '/',

  • obj bezieht sich auf Self Object, dh das ist deine aktuelle Klasse selbst.
  • cr : Datenbank-Cursor-Objekt zur Ausführung von SQL-Betrieb auf DB 🙂
  • uid L ist aktueller Benutzer angemeldet.
  • context ist dict fro pass die context zwischen Objekten.

Diese alle params sind standardmäßig auf jede osv.osv abgeleitet von osv.osv oder osv.Model und diese params sind global zu verwenden, so können sie sie mit der Methode verwenden, die Sie wollen.

  • Leistungsüberwachung Openerp
  • Odoo: Eingabe von Mitarbeitern basierend auf department_id, one2many Domain
  • Der Standardwert des Feldes hängt von einem anderen Feld in odoo ab
  • Wie rufe ich einen Assistenten von einer Funktion in OpenERP7 an?
  • Modulmodul konnte nicht in openERP7 Installation auf Ubuntu 10.04 geladen werden
  • OpenERP fields.function () Erklärung
  • OpenERP 7 Zugriffsrechte für Benutzerrollen
  • Ist es möglich, eine einzige Beziehung zu machen, ohne das "Fremdschlüsselfeld" des Zielmodells anzugeben?
  • Der beste Weg, um Openerp-Daten in csv-Datei mit python
  • Verwandtes Typfeld zeigt keinen Wert an
  • Deaktivieren Sie die Schaltfläche "Erstellen und Verwerfen" für eine bestimmte Funktion in OpenERP
  • Python ist die beste Programmiersprache der Welt.