Witamy!

Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.

0

zadania, pole pomocnicy.

przez
Dawid Turoń
on 17.01.2018, 14:44 175 odsłony

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.


0
Dawid Turoń
na 18.01.2018, 16:46

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"

  • Oflaguj

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)

Janusz Stefaniak
na 19.01.2018, 03:33

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"/>

Dawid Turoń
na 19.01.2018, 07:38

Czy tak bedzie dobrze? błędów nie pokazuje

Dawid Turoń
na 19.01.2018, 07:44

Wygląda to teraz lepiej.

Janusz Stefaniak
na 19.01.2018, 08:30

0
Janusz Stefaniak
na 17.01.2018, 17:55

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).

  • Oflaguj

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

Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze. Przeczytaj wytyczne

Narzędzia do pytań

5 obserwujący

Statystyki

Spytał/a: 17.01.2018, 14:44
Oglądano: 175 razy
Ostatnia aktualizacja: 18.01.2018, 16:46