Ожидаемый синглтон: hr.employee(1, 2)

Добрый день! У меня ошибка при загрузке вида kanban. Я наследую hr.employee Kanban xml и просто добавляю условие, если срок действия определенных документов истек, он добавит уведомление об просроченных документах в представлении kanban, вот код xml:

    <record model="ir.ui.view" id="hr_kanban_view_employees_recruitment_kanban">
        <field name="name">HR - Employees Kanban Document Status</field>
        <field name="model">hr.employee</field>
        <field name="inherit_id" ref="hr.hr_kanban_view_employees"/>
        <field name="arch" type="xml">
            <xpath expr="//templates" position="before">
                <field name="employee_id"/>
                <field name="documents_status"/>
            </xpath>
            <xpath expr="//div[@class='oe_employee_details']/ul/li[@id='last_login']" position="inside">
                <span t-if="record.documents_status.raw_value" style="font-size: 100%%"
                        t-att-class="record.documents_status.raw_value==true'oe_kanban_button oe_kanban_color_3'">
                    <field name="employee_id" readonly = "1"/>
                    Has Expired Documents
                </span>
            </xpath>
        </field>
    </record>

и модель для поля documents_status

и при загрузке

documents_status = fields.Boolean('DocumentStatus', readonly = True,store = False,compute ='getdocumentStatus')

    @api.one
    def getdocumentStatus(self):
        raise Warning(self.employee_id)
        server_date = datetime.datetime.strptime(DATE_NOW.strftime("%Y-%m-%d") ,"%Y-%m-%d")
        result = {}

        for id in self.ids:
            result[id] = {
                'documents_status': True
            }
            totaldoc = self.env['hr.employee_documents'].search_count([('date_expiry', '<', server_date),('employee_doc_id','=', id)])
            if totaldoc > 0:
                result[id]['documents_status'] = True
                self.documents_status = True
            else:
                result[id]['documents_status'] = False
                self.documents_status = False
        return result

в представлении kanban у сотрудника произошла ошибка

Ожидаемый синглтон: hr.employee(1, 2).

кто-нибудь поможет мне с этим и заранее спасибо.


person Black and White    schedule 28.09.2015    source источник
comment
вы можете использовать api.multi вместо api.one   -  person Jainik Patel    schedule 28.09.2015
comment
Я пробовал, но ошибка все равно появляется   -  person Black and White    schedule 28.09.2015
comment
Почему вы добавляете поле с именем employee_id в модель hr.employee? Разве это не то же самое, что вместо этого поставить просто id?   -  person forvas    schedule 28.09.2015


Ответы (1)


Я не знаю отношения между hr.employee и hr.employee_documents. Если это One2many (много документов для уникального сотрудника), в модели hr.employee должно быть поле One2many, указывающее на hr.employee_documents. Предположим, это поле называется documents (это важно для запуска метода вычисления через api.depends). Затем напишите этот код:

@api.multi
@api.depends('documents.date_expiry')
def getdocumentStatus(self):
    server_date = datetime.datetime.strptime(DATE_NOW.strftime("%Y-%m-%d"), "%Y-%m-%d")
    for record in self:
        totaldoc = self.env['hr.employee_documents'].search_count([('date_expiry', '<', server_date),('employee_doc_id','=', self.id)])
        if totaldoc > 0:
            record.documents_status = True
        else:
            record.documents_status = False

Вы должны написать нам взаимосвязь между обеими моделями, чтобы дать вам точный ответ.

person forvas    schedule 28.09.2015
comment
Спасибо за код и ответ, просто перепишите мой код. Я все еще использовал @api.one, но я не использовал цикл в функции, чтобы получить общее количество просроченных документов для конкретного сотрудника: D Большое спасибо - person Black and White; 29.09.2015
comment
Привет! Прочитав ваш комментарий, я понял, что у меня ошибка в коде, поэтому я отредактировал свой ответ. Я сделал цикл поверх self, но все еще использовал self внутри этого цикла вместо record. Вы можете использовать @api.one без петли и @api.multi с петлей. Лично я рекомендую вам использовать @api.multi и цикл: это доставило мне меньше проблем, чем @api.one. Кстати, я рад, что помог тебе. Не забудьте указать правильный ответ, чтобы закрыть вопрос, если вы считаете его правильным! - person forvas; 29.09.2015