2016-03-27 2 views
1

Ich habe ein neues Modell ‚sale.order.category‘, um Gruppe Verkauf Auftragspositionen in bestimmten Unterkategorien (so dass Zwischensummen anzuzeigen, usw.)Odoo 8: Wie verknüpfe ich ein Many2one-Feld automatisch mit dem übergeordneten Modell?

class SaleOrderCategory(models.Model): 
    _name = 'sale.order.category' 
    name = fields.Char('Name', required=True) 
    line_ids = fields.One2many('sale.order.line', 'category_id', 'Order Lines in this category') 
    order_id = fields.Many2one('sale.order', 'Order', required=True, readonly=True) 

class SaleOrder(models.Model): 
    _name = 'sale.order' 
    _inherit = 'sale.order' 
    order_category_ids = fields.One2many('sale.order.category', 'order_id', 'Categories in this order', readonly=True, copy=True) 

Nur zur Info, hier ist Baum meiner Bestellung Linien Ansicht Modifikation die Spalte Kategorie hinzuzufügen:

<!-- adds a category column in the order lines list --> 
<xpath expr="//field[@name='order_line']/tree/field[@name='name']" position="after"> 
    <field name="category_id"/> 
</xpath> 

Meine Frage ist: wie kann ich automatisch das order_id Feld mit dem aktuellen Kundenauftrag ID füllen, wenn ich eine neue Kategorie durch die Auftragspositionen Baum (innerhalb eines Kundenauftrages) erstellen ?

Vielen Dank, Max

Antwort

0

Vorbemerkung: Ihr Anwendungsfall scheint im Zusammenhang zu dem, was die offizielle sale_layout Modul der Fall ist, so dass Sie einen Blick an ihm haben möchten, bevor es weiter gehen kann. Vielleicht könnten Sie es erweitern, anstatt von vorne anzufangen.

Als nächstes wird die meisten grundlegende Antwort auf Ihre Frage ist ein Standardwert für die order_id Feld Ihres sale.order.category Modell passieren, wenn Sie es aus der Sicht erstellen. Sie können das tun, indem Sie eine context mit einem geeigneten Standardwert auf dem many2one Feld Einstellung, von dem Sie den Wert schaffen:

<xpath expr="//field[@name='order_line']/tree/field[@name='name']" position="after"> 
    <field name="category_id" context="{'default_order_id': parent.id}"/> 
</xpath> 

Ihr category_id Feld auf der sale.order.line Baumansicht definiert ist, so wird parent dynamisch auf das verweisen Elternakte innerhalb der Web-Client-Schnittstelle, hier die sale.order.

Allerdings wird diese Option nicht gut funktionieren:

  • Wenn Sie einen neuen Kundenauftrag erstellen, müssen Sie Ihre Kategorien erstellen, bevor der Kundenauftrag auch gespeichert wird, so gibt es keinen möglichen Wert für order_id noch nicht. Aus diesem Grund können Sie nicht order_id erforderlich machen, und Sie müssen den Wert später erneut festlegen, oder Sie müssen Ihre Bestellungen speichern, bevor Sie mit dem Hinzufügen der Kategorien beginnen.
  • Sie haben bereits ein order_lines one2many Feld in Ihrem sale.order.category Modell. Das Feld order_id ist redundant mit dem Feld line_ids, da alle Zeilen vermutlich derselben Reihenfolge angehören.

Eine einfache Alternative vollständig wäre, die order_id Feld wegzulassen (lines_id[0].order_id verwenden, wenn Sie es brauchen), oder mit einem related field zu ersetzen, die automatisch aus den Leitungen berechnet werden (es wird den Wert nehmen ab der erste Auftrag Linie):

order_id = fields.Many2one('sale.order', related='line_ids.order_id', readonly=True) 

Was sollten Sie auf Ihre Anforderungen tun hängt, ist es schwer zu sagen, basierend nur auf Ihre Frage.

Verwandte Themen