Witamy!
Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.
Porada, tworzenie pola
Witam,
mam pole many2many (res.user), chcę zrobić przycisk tworzący linie one2many (account.analityc.line) dla każdego ID z res.user.
Kod, tworzy poprawnie, gdy w many2many jest jeden ID
@api.multi
def generuj_karty(self):
zespol = self.pomocnicy_id.id
vals_tools = []
for line in self:
if zespol:
vals_tools.append((0, 0, {
'date': line.date,
'user_id': zespol,
'name': '(wygenerowana)',
'unit_amount': line.czas_trwania,
'project_id': line.task_id.project_id,
'task_id': line.task_id
}))
else:
raise UserError(('Uzupełnij listę pomocników'))
self.karty_pracy_id = vals_tools
return True
Jeżeli dodam drugi ID to mam taki błąd:
Traceback (most recent call last): File "/opt/odoo10/odoo/http.py", line 640, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/opt/odoo10/odoo/http.py", line 677, in dispatch result = self._call_function(**self.params) File "/opt/odoo10/odoo/http.py", line 333, in _call_function return checked_call(self.db, *args, **kwargs) File "/opt/odoo10/odoo/service/model.py", line 101, in wrapper return f(dbname, *args, **kwargs) File "/opt/odoo10/odoo/http.py", line 326, in checked_call result = self.endpoint(*a, **kw) File "/opt/odoo10/odoo/http.py", line 935, in __call__ return self.method(*args, **kw) File "/opt/odoo10/odoo/http.py", line 506, in response_wrap response = f(*args, **kw) File "/opt/odoo10/addons/web/controllers/main.py", line 889, in call_button action = self._call_kw(model, method, args, {}) File "/opt/odoo10/addons/web/controllers/main.py", line 877, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/opt/odoo10/odoo/api.py", line 689, in call_kw return call_kw_multi(method, model, args, kwargs) File "/opt/odoo10/odoo/api.py", line 680, in call_kw_multi result = method(recs, *args, **kwargs) File "/opt/odoo10/addons/ocena_pracownika/models/ocena.py", line 511, in generuj_karty zespol = self.pomocnicy_id.id File "/opt/odoo10/odoo/fields.py", line 2477, in __get__ return record.ensure_one()._ids[0] File "/opt/odoo10/odoo/models.py", line 4820, in ensure_one raise ValueError("Expected singleton: %s" % self) ValueError: Expected singleton: res.users(15, 32)
Nie wiem czy się rozumiemy.
Mam pole, gdzie wybieram użytkowników będących pomocnikami. Chce zrobić przycisk który dla każdego pracownika utworzy karte pracy.
pomocnicy_id = fields.Many2many('res.users', 'project_task_res_pomocnicy_rel', 'project_task_id',
'res_pomocnicy_id', string='Pomocnicy', )
karty_pracy_id = fields.One2many('account.analytic.line', 'raport_realizacji_id', string='Karty pracy',)
rozwiązaniem było:
rec = super(generatorKart, self).default_get(fields)
context = dict(self._context or {})
active_model = context.get('active_model')
active_ids = context.get('active_ids')
raport = self.env[active_model].browse(active_ids)
vals = []
for line in raport:
pomocnicy_ids = line.pomocnicy_ids + line.user_id
for record in pomocnicy_ids:
vals.append((0, 0, {
'date': line.date,
...
}))
rec.update({'karty_id': vals})
return rec
Jeśli w zbiorze zwracanych rekordów znajduje się ich kilka a nie jeden, w tedy należy używać atrybutu ids zamiast id.
Zetem poprawny będzie zapis:
zespol = self.pomocnicy_id.ids
po pomocnicy_id są typu many2many (zatem kilka rekordów, swoją drogą winni być raczej nazwani jako pomocnicy_ids).
Ponieważ zespol to kilku, bledny bedzie także zapis:
'user_id': zespol,
Twoja odpowiedź
Spróbuj dać znacząca odpowiedź. Jeśli chcesz wypowiedzieć się na temat pytania lub odpowiedzi, po prostu użyj narzędzia komentowania. Proszę pamiętać, że zawsze można zrewidować swoją odpowiedź - nie ma potrzeby odpowiadać na to samo pytanie dwa razy. Także prosimy, nie zapomnij zagłosować - to naprawdę pomaga wybrać najlepsze pytania i odpowiedzi!
Bądź na bieżąco
O tym forum
Narzędzia do pytań
Statystyki
Spytał/a: 02.09.2019, 08:53 |
Oglądano: 1254 razy |
Ostatnia aktualizacja: 02.09.2019, 22:08 |
Chyba rozumiem. Pole pomocnicy_id jest many2many - zatem kliku, nie jeden (czyli powinno być nazwane poprawniej pomocnicy_ids, a ich id-y pobierane jako pomocnicy_ids.ids)