Was ich getan habe:

Ich habe ein Modul mit

myfield = fields.Many2one('res.partner', string="Graduate", domain=[('is_graduated', '=', True)])

Dann habe ich noch eine Klasse mit

_inherit = 'res.partner'
is_graduated = fields.Boolean("Graduated before?", default=False)
graduations = fields.Many2many('my_module.courses', string="Graduation courses")

Was ich bekomme:

Das myfield funktioniert gut, aber das Feld graduations ist leer. Wenn Sie das Profil user 1 bearbeiten, können Sie mit Add item Einträge zum Feld graduation hinzufügen, diese müssen jedoch automatisch ausgefüllt werden.

Was ich erwarte:

Ich gehe davon aus, dass jeder Datensatz, in dem myfield auf user 1 eingestellt ist, im Feld graduations sichtbar ist, wenn Sie das Profil user 1 öffnen. Wenn ich einen Datensatz erstelle und den Wert myfield auf user 1 setze, muss dieser Datensatz im Profil user 1 im Feld graduations sichtbar sein. Wie erreicht man das?

18
hockeyman 6 Aug. 2015 im 13:29

4 Antworten

Beste Antwort

User_rel_ids = fields.Many2many (comodel_name = 'Kurs', Relation = 'Benutzer_Kurs_Rel', Spalte1 = 'Benutzer_ID', Spalte2 = 'Kurs_ID')

Oder

user_rel_id = fields.Many2many('course') 

Zum Füllen von Daten (zum Hinzufügen einer neuen Beziehung)

user_rel_id = [(4,course_id)]

Laut http://odoo4u.blogspot.com/2014/10/orm- methods.html heißt es: Eine vollständige Liste der Optionen finden Sie in der Dokumentation zur Klasse. Das Gleiche gilt für one2many

Für ein Feld many2many und one2many ist eine Liste von Tupeln erwartet. Hier ist die Liste des akzeptierten Tupels mit dem entsprechende Semantik:

(0, 0, { values }) Link zu einem neuen Datensatz , der sein muss erstellt mit dem angegebenen Wertewörterbuch

(1, ID, { values }) Aktualisiere den verknüpften Datensatz mit id = ID (schreibe) Werte darauf)

(2, ID) Entfernen und Löschen des verknüpften Datensatzes mit id = ID (Aufrufe) Deaktivieren Sie die ID, um das Objekt vollständig zu löschen, und den Link zu es auch)

(3, ID) schneidet den Link zum verknüpften Datensatz mit id = ID ab ( lösche den Beziehung zwischen den beiden Objekten, löscht jedoch nicht das Ziel Objekt selbst)

(4, ID) Link zu vorhandenem Datensatz mit id = ID (fügt a hinzu Beziehung)

(5) Alle aufheben (wie die Verwendung von (3, ID) für alle verknüpften Datensätze)

(6, 0, [IDs]) Ersetzen die Liste der verknüpften IDs (wie bei Verwendung von (5) dann (4, ID) für jede ID in der Liste der IDs)

38
Bhargav Rao 8 Juni 2019 im 02:08

Sie müssen ein onchange method für myfield verwenden und dann das Feld graduations ausfüllen, ungefähr so:

@api.onchange('myfield'):
def _onchange_myfield(self):
    #fill graduations field here...
    ...
1
Juan Salcedo 6 Aug. 2015 im 14:07
_inherit = 'crm.phonecall'    
alarm_ids = fields.Many2many('calendar.alarm',string="Reminders") 
 set the alarm_ids of calendar.event model in create method of crm phonecall...
 alarm_ids = [(6,0,self.alarm_ids.ids)] 

_inherit = 'calendar.event'
 alarm_ids = fields.Many2many('calendar.alarm',string="Reminders") 
1
Bhautik 23 Juni 2017 im 06:14

Sie können so erreichen.

Beispielsweise:

@api.one
@api.depends(
      #here you may define your depend field name
)
def _set_graduations(self):
    #here comes your logic which will collect ids
    #and than return it with self.field_name like

    self.graduations = [list_of_ids]


graduations = fields.Many2many('my_module.courses', string='Payments',
                                compute='_set_graduations') 

Wenn Sie @ api.depends nicht verwenden möchten, können Sie @ api.multi verwenden. Als Referenz können Sie das account -Modul mit der account_invoice.py -Datei auschecken.

0
Bhavesh Odedra 13 Aug. 2015 im 07:04