2016-05-17 5 views
2

Also habe ich mich im Internet umgesehen, um eine Möglichkeit zu finden, meine eigene Sequenz für die neue API für Odoo 9 zu erstellen, die ich benutze. Ich konnte jedoch keine befriedigende Antwort finden. Soweit ich gesehen habe, sind Sequenzen in den Odoo Docs nicht sehr gut dokumentiert.Odoo Neue API Auto Increment/Sequencing

Hier ist, was ich bis jetzt weiß.

Von this Ich weiß:

<openerp> 
    <data noupdate="1"> 
    <record model="ir.sequence.type" id="seq_type_obj_id"> 
     <field name="name">obj_id_seq</field> 
     <field name="code">seq.obj.name</field> 
    </record> 
    <record model="ir.sequence" id="seq_obj_id"> 
     <field name="name">obj_id_seq</field> 
     <field name="code">seq.obj.name</field> 
     <field name="prefix">prefix</field> 
     <field name="padding">3</field> 
    </record> 
    </data> 
</openerp> 

Aber anscheinend ist ir.sequence.type nicht ein Modell, das vorhanden ist, und ich kann nicht verwendet werden, so entfernte ich diesen Rekord und es kompiliert/Updates ohne Fehler.

Aus früheren Quelle, ich weiß auch:

my_sequence = self.pool['ir.sequence'].get(cr, uid, seq_obj_name) 
self.write(cr, uid, [picking.id], {'ur_emp_no_field': my_sequence}) 

Aber das ist die alte API, also hat er es geändert:

# Correct me if I'm wrong here 
my_sequence = self.env['ir.sequence'].get('seq.obj.name') 

und bin zu dem Erstellen Funktion hinzugefügt, um es , die dann in ein beliebiges zu schreibendes Feld schreibt.

Also habe ich das alles gemacht, ohne irgendwelche Fehlermeldungen zu bekommen.

Mein Problem ist: Das Feld, in dem ich die Sequenz-Instanz speichern soll, ändert sich nicht. Ich habe die Sequenzeinstellungen überprüft und die Reihenfolge wird nicht erhöht, wenn ich einen neuen Datensatz erstelle.

Aus Gründen der Klarheit:

@api.model 
def create(self, vals): 
    for rec in self: 
     rec.seq_id = self.env['ir.sequence'].get('seq.obj.name') 
    return super(PurchaseOrder, self).create(vals) 

Wenn mir jemand eine gründliche Erklärung, wo Odoo funktioniert die Autoinkrement geben könnte, vielleicht mich direkt in eine geeignete Quelle, oder darauf hinweisen, was mit meinem Code falsch ist und wie ich es beheben kann, würde ich die Mühe sehr schätzen.

Antwort

0

Ihr Code hat die Verzeichnisvariable nicht aktualisiert. Das ist der Grund dafür.

Versuchen Sie mit diesem Code.

@api.model 
def create(self, vals): 
    if vals: 
     vals.update({ 
      'seq_id': self.env['ir.sequence'].get('seq.obj.name') 
     }) 
    return super(PurchaseOrder, self).create(vals) 
+0

Das ist es, danke. Ich nehme an, Variablen direkt zuzuweisen, wenn ich die Erstellungsfunktion überschreibe, war nicht gerade eine gute Idee. – huaa