2017-01-20 6 views
0

Ich habe 2 Fragen. Erste.Einfache Odoo/Python/XML

Dieses Feld muss ganzzahlig größer oder gleich 50 sein. Wie kann ich das tun?

value = fields.Integer("Value", required=True) 

zweite Frage.

Ich wollte die Suche nach "Name" hinzufügen, aber wenn ich diese Coed ausführen, bekomme ich TypeError: Type ist nicht Konstruktor. Was ist falsch an meinem Suchbereich? Ohne Suchbereich läuft es normal.

<record model="ir.ui.view" id="helloworld.list2"> 
     <field name="name">helloworld listx</field> 
     <field name="model">helloworld.test2</field> 
     <field name="arch" type="xml"> 
     <search> 
      <field name="name"/> 
     </search> 
     <tree> 
      <field name="name"/> 
      <field name="reference"/> 
     </tree> 
     </field> 
    </record> 

UPDATE.

from openerp import models, fields, api 
from openerp.exceptions import ValidationError 


class HelloWorld(models.Model): 
    _name = 'helloworld.test' 
    name = fields.Char("Name", required=True, size=20) 
    value = fields.Integer("Value", required=True) 

    # I am adjusting the indentation below so the methods become part of your class 

    @api.onchange('value') 
    def _onchange_value(self): 
     for record in self: 
      if record.value < 20: 
       raise ValidationError("Your record is too small: %s" % record.value) 
+0

Wenn Sie diese Antwort hilfreich finden, würde ich mich freuen, wenn Sie es als korrekt markieren würden. Vielen Dank! –

Antwort

2

Es gibt ein paar Möglichkeiten, es aber der Dekorateur getan werden könnte ‚Constraints‘ ist wahrscheinlich das, was Sie wollen. Wenn nicht, könnten Sie die Methoden 'Schreiben' und 'Erstellen' überschreiben, um Ausnahmen auszulösen.

Die Constrains-Funktionen werden vor dem Schreiben oder Erstellen eines Datensatzes ausgeführt. Und es wird nicht erlaubt, dass der Datensatz geschrieben wird, wenn der Wert die Validierung nicht besteht.

from odoo.exceptions import ValidationError 

@api.constrains('value') 
def _check_value_field(self): 
    for record in self: 
     if record.value < 50: 
      raise ValidationError("Your record is too small: %s" % record.value) 

In Bezug auf Ihre Suche anzeigen. Sie haben auch eine Baumansicht. Die Suchansicht und die Baumansicht sind insgesamt getrennte Dinge. Sie sollten sie getrennt definieren.

<record model="ir.ui.view" id="helloworld.tree2"> 
     <field name="name">test2.tree</field> 
     <field name="model">helloworld.test2</field> 
     <field name="arch" type="xml"> 
     <tree> 
      <field name="name"/> 
      <field name="reference"/> 
     </tree> 
     </field> 
</record> 

<record model="ir.ui.view" id="helloworld.search2"> 
     <field name="name">test2.search</field> 
     <field name="model">helloworld.test2</field> 
     <field name="arch" type="xml"> 
     <search> 
      <field name="name"/> 
     </search> 
     </field> 
</record> 

Sie können, wenn Sie sofortige Validierung von Felddaten zur Verfügung stellen wollen, eine ‚onchange‘ -Funktion als auch mit (als CZoellner empfohlen), wird dies sofort der Benutzer benachrichtigen, der eingegebene Wert ist jedoch ungültig sollte nicht für die Datensatzüberprüfung verwendet werden, da der Benutzer die Fehlermeldung einfach umgehen kann. Hier ist ein Beispiel.

from odoo.exceptions import ValidationError 

@api.onchange('value') 
def _onchange_value(self): 
    for record in self: 
     if record.value < 50: 
      raise ValidationError("Your record is too small: %s" % record.value) 
+0

Gibt es einen einfacheren Weg? Zum Beispiel, wenn wir wollen, dass unsere Feldlänge 20 max ist, tun wir es wie fields.interger (Größe = 20) vielleicht gibt es etwas ähnliches? – Grf

+0

Nicht, dass ich mir dessen bewusst bin. –

+0

Stimmen Sie völlig mit Ihrer Antwort überein Phillip. Vielleicht möchten Sie es erweitern, indem Sie den 'record.value <50' in' record.value> = 50' ändern, da das OP "größer oder gleich als 50" erwähnt. –