2017-06-05 4 views
2

Mit Odoo 10 (von GitHub Commit 7413b26, Zweig 10.0 abgerufen), versuche ich, die Umgebung in einer Suchfilter-Domäne für eine Strukturansicht angewendet. Wie folgt aus:Verwendung von Environnement in <filter> Domäne

<filter string="Metal" domain="[('attribute_id','=', self.env['ir.config_parameter'].get_param('my_module.attrib_metal', None))]" help="metal"/> 

Aber Odoo wird mich nicht self lassen verwenden:

NameError: name 'self' is not defined


Ich habe auch versucht meine attrib_metal mit Python zu filtern, indem Sie das Ergebnis in einem Feld Speichern, aber ich don‘ Ich möchte es in meiner Datenbank speichern, aber die Suche nach Odoo erfordert es.

In meinem Python:

def get_my_params(self): 
    attrid = self.env['ir.config_parameter'].get_param(
      'my_module.attrib_metal', None) 
    if attrid: 
     for rec in self: 
      setattr(rec, attrib_metal, rec.attribute_id.id == int(attrid)) 

attrib_metal = fields.Boolean(store=False, compute="get_cr_params") 

Dieser Code ist Teil eines inhereted product.attribute.value Modell.

In meiner XML-Ansicht:

<filter string="Metal" domain="[('attrib_metal', '=', 'True')]" help="metal"/> 

ich mit dem store = True Parameter versucht habe, aber auf diese Weise wird der Wert in der Datenbank gespeichert und berechnet nur einmal, das nicht das, was ich suche zum.

Das ist also nicht der richtige Weg.


Wie kann man die environnement in einer <filter> Domain verwenden?

+0

'store = false' bedeutet, dass odoo das Feld nicht in db speichert –

Antwort

1

Die Domain wird im Web Client (Frontend/Javascript) ausgewertet. Der Web-Client weiß nichts über self. Außerdem wird die Punktnotation in den Filtern nicht unterstützt. Sie müssen ein neues Feld für dieses erstellen, da die Domänen auf der JavaScript-Seite ausgeführt werden und Sie dort keinen Code ausführen können. Das neue Feld muss auch in der Datenbank gespeichert sein. Dieses Muster wird überall in Odoo verwendet.

Verwendung: <field name="your_field" invisible="1" /> es um Ihre Ansicht zu bringen und sie unsichtbar zu halten und dann

<filter string="Metal" domain="[('attribute_id','=', your_field]" help="metal"/> 
+0

ich meine Frage aktualisiert haben Um meine Anfrage zu klären: Ich möchte das Feld jedes Mal berechnen, wenn es angezeigt wird. Aber 'store = True' führt dies nur einmal aus. – DamienAuvray

+0

Dann müssen Sie die Methode dekorieren, die das Feld mit 'api.depends ('another_field')' berechnet. Jedes Mal, wenn sich das 'another_field' ändert, wird Ihr Feld neu berechnet. Wenn Sie möchten, dass Ihr Feld bei jeder Anzeige neu berechnet wird, müssen Sie die Basismethode 'fields_get' überschreiben und das Feld dort berechnen. IMHO, das wäre keine gute Idee. –

+0

Es funktioniert, danke. – DamienAuvray

Verwandte Themen