Witamy!
Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.
zadania, pole pomocnicy.
Witam,
W mojej firmie zadania są przydzielane dla większej ilości pracowników dlatego używam pola "przypisane do" oraz moje pole pomocnicy.
pomocnicy_id = fields.Many2many('res.users', 'project_task_res_partner_rel', 'project_task_id',
'res_partner_id', string='Pomocnicy', copy=False, )
ale jest też pole zespół które sumuje pole "user_id" i "pomocnicy_id" ale w chwili dodania więcej jak jedną pozycje w "pomocnicy_id" wywala błąd:
File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/fields.py", line 904, in __get__ record.ensure_one() File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/models.py", line 4820, in ensure_one raise ValueError("Expected singleton: %s" % self) ValueError: Expected singleton: res.users(9, 11)
działanie:
@api.depends('user_id.partner_id', 'pomocnicy_id.partner_id'')
def _user_zespol(self):for record in self:
record.zespol = record.user_id.partner_id + record.pomocnicy_id.partner_id
Proszę o pomoc jak dodać pole many2many do many2one zeby wynik był w many2many.
dzieki za odpowiedz.
Pole "zespol" ma zawierać zawartość pola "przypisane do" oraz "pomocnicy_id"
błąd:
Traceback (most recent call last): File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/http.py", line 640, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/http.py", line 677, in dispatch result = self._call_function(**self.params) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/http.py", line 333, in _call_function return checked_call(self.db, *args, **kwargs) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/service/model.py", line 101, in wrapper return f(dbname, *args, **kwargs) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/http.py", line 326, in checked_call result = self.endpoint(*a, **kw) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/http.py", line 935, in __call__ return self.method(*args, **kw) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/http.py", line 506, in response_wrap response = f(*args, **kw) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/addons/web/controllers/main.py", line 885, in call_kw return self._call_kw(model, method, args, kwargs) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/addons/web/controllers/main.py", line 877, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/api.py", line 689, in call_kw return call_kw_multi(method, model, args, kwargs) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/api.py", line 680, in call_kw_multi result = method(recs, *args, **kwargs) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/models.py", line 3018, in read values[name] = field.convert_to_read(record[name], record, use_name_get) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/models.py", line 5208, in __getitem__ return self._fields[key].__get__(self, type(self)) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/fields.py", line 910, in __get__ self.determine_value(record) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/fields.py", line 1022, in determine_value self.compute_value(recs) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/fields.py", line 976, in compute_value self._compute_value(records) File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/fields.py", line 967, in _compute_value getattr(records, self.compute)() File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/addons/project_meetings/models/project_meetings.py", line 66, in _user_zespol record.zespol = record.user_id.partner_id + record.pomocnicy_id.partner_id File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/fields.py", line 904, in __get__ record.ensure_one() File "/home/dawid/Dokumenty/odoo-10.0.post20171225/odoo/models.py", line 4820, in ensure_one raise ValueError("Expected singleton: %s" % self) ValueError: Expected singleton: res.users(10, 13)
a to kod:
@api.depends('user_id.partner_id', 'pomocnicy_id.partner_id')
def _user_zespol(self):
for record in self:
record.zespol = record.user_id.partner_id + record.pomocnicy_id.partner_id
zespol = fields.Many2many('res.partner', 'project_task_res_partner_rel', 'project_task_id',
'res_partner_id', string='Zespół', copy=False, compute="_user_zespol",)
pomocnicy_id = fields.Many2many('res.users', 'project_task_res_partner_rel', 'project_task_id',
'res_partner_id', string='Pomocnicy', copy=False, )
Problem się pojawia jak dodaje więcej jak jedną pozycje w "pomocnicy_id"
Moja modyfikacja koniec końców polega na tym że w zadaniu tworze spotkanie (calendar.event) a funkcją context wpisuje "zespol" do pola "partner_ids" w kalendarzu, aby zaimportować listę wszystkich użytkowników związanych z zadaniem.
tak to zrobiłem:
pomocnicy_id = fields.Many2many('res.partner', 'project_task_res_pomocnicy_rel', 'project_task_id',
'res_pomocnicy_id', string='Pomocnicy', )
@api.depends('user_id.partner_id', 'pomocnicy_id')
def _user_zespol(self):
for record in self:
record.zespol = record.user_id.partner_id + record.pomocnicy_id
i widok:
<field name="pomocnicy_id" domain="[('user_ids', '!=', False)]" widget="many2many_tags"/>
Nie do końca rozumiem jak zdefiniowane jest twoje pole o nazwie "zespol". Tego nie podałeś. Nie podałeś również związku pomiędzy wycinkiem loga i swoim kodem (wycinek loga jest zbyt krótki). Nie rozumiem także pytania. Dlaczego piszesz o sumowaniu poł typu many2many jeśli pole user_id.partner_id jest typu many2one i podobnie tym samym pole (dla konkretnego pomocnika z many2many) pomocnicy_id.partner_id.
Przypuszczać mogę tylko, że tak na prawdę to chcesz wykonać następująca operację na polach many2one i many2many:
record.zespol = record.user_id + record.pomocnicy_id
i taka raczej winna się udać (jedno i drugie to recordset).
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: 17.01.2018, 14:44 |
Oglądano: 2065 razy |
Ostatnia aktualizacja: 18.01.2018, 16:46 |
Tak jak przewidywałem twój błąd znajduje się w wyrażeniu record.pomocnicy_id.partner_id
Zbiorem rekordów jest record.pomocnicy_id i to dla niego, kolejno winieneś wyliczyć dopiero zbiór odpowiednich partner_id. Najprostszym wydaje się zatem zdefiniowanie pola "zespol" jako many2many do res.users.
Drugim istotnym błędem jest fakt, że dwa razy używasz tej samej tabeli project_task_res_partner_rel do przechowywania kompletnie odmiennych danych (raz bazujących na res.users a drugim razem na res.partner)