AttributeError: объект «NoneType» не имеет атрибута «get_default_company»

class Sale(osv.osv):
_name = 'sale'

_columns = {
    'name': fields.char('Company Name', size=128)
}

def get_default_company(self, cr, uid, context=None):
    company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id,
    return company_id
Sale()

Я использовал приведенный выше код, все хорошо, но я не знаю, где и как вызвать мою функцию get_default_company(). Когда я вызываю этот метод, он дает

cr and uid invalids 

person Shahid Malik    schedule 22.04.2014    source источник


Ответы (3)


Похоже, вам нужно установить значение по умолчанию для вашей компании. для этого вам нужно использовать атрибут модели _defaults, который устанавливает значение по умолчанию для вашего поля. как

_defaults = {
    'company_id': get_company
}

перед этим методом вам нужно определить метод get_company, который должен возвращать идентификатор компании, например

def get_company(self, cr, uid, context=None):
    user_rec = self.pool.get('res.users').browse(cr, uid, uid, context)
    return user_rec.company_id.id

и ко всему этому нужно поле в _columns. поэтому вам также нужно добавить company_id как поле many2one. как

_columns = {
    'name': fields.char('Company Name', size=128),
    'company_id': fields.many2one('res.company', "Company")
}

Измените все это, ваша модель будет выглядеть,

class sale(osv.osv):
    _name = 'sale'

    _columns = {
        'name': fields.char('Company Name', size=128),
        'company_id': fields.many2one('res.company', "Company")
    }


    def get_company(self, cr, uid, context=None):
        user_rec = self.pool.get('res.users').browse(cr, uid, uid, context)
        return user_rec.company_id.id

    _defaults = {
        'company_id': get_company
    }

sale()

Надеюсь это поможет!

person Atul Arvind    schedule 22.04.2014

Что такое AttributeError: «NoneType»?

NoneType означает, что функция или экземпляр любого класса или объекта не работает с вами, на самом деле у вас None .


Вы Sale(), поэтому возникает эта ошибка, вам нужно вызвать функцию get_default_company() и вызвать эту функцию, прежде чем вы должны реализовать этот метод. в противном случае вы получите ошибку (get_default_company функция не существует).

class Sale(osv.osv): 
    _name = 'sale'

    def get_default_company(self, cr, uid, context=None):
        company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id,
        return company_id

    get_default_company()             // Call this function

    _columns = {
         'name': fields.char('Company Name', size=128)
    }

И вы хотите создать функциональное поле, да, вы можете создать его, проверьте эту документацию< /а>.

person Jay Patel    schedule 22.04.2014

Просто добавьте в класс Sale _defaults dict. OpenERP вызовет его автоматически при создании нового объекта.

_defaults = {
        'company_id': get_default_company,
}

Например, посмотрите здесь. Более подробную информацию вы можете найти в коде модулей OpenERP.

person Lukasz Puchala    schedule 22.04.2014