Какая польза от связанных полей в OpenERP?

Может кто-нибудь объяснить мне что-то о связанных полях. Например -

  • Как это использовалось
  • Как этому можно помочь
  • Для какого сценария я должен использовать fields.related

Если кто-нибудь может привести небольшой пример реального использования fields.related, я был бы признателен.


person necromancer    schedule 08.10.2010    source источник


Ответы (4)


Это позволяет вам вытащить поле из связанной таблицы. Дополнительную информацию можно найти в книге для разработчиков и в одном примере посмотреть на поле order_partner_id класса sale_order_line. В версии 5.14 это строка 806 файла addons/sale/sale.py.

Я часто обнаруживаю, что хочу отобразить поле в списке, но оно находится в родительской записи, а не в фактической таблице, которую я перечисляю.

person Don Kirkby    schedule 08.10.2010
comment
Я думал о том же, я тоже пробовал пример из книги разработчика, это здорово, в предыдущей версии я использовал для достижения этого поле функции - здорово, что теперь есть связанные поля - это работает до уровня n! бинго !!! - Спасибо - person necromancer; 09.10.2010

При использовании связанного поля вы должны сначала выбрать, какое поле будет связано. Например, я создаю новый модуль для добавления сведений о студенте. Здесь студент фактически является партнером. Итак, _rec_name='partner_id' занято. В res.partner вы, возможно, видели поле ref. Значение в поле ref принимается за internal_number для студенческого модуля.

Итак, что мы делаем здесь

class student(osv.osv):
    _name='student'
    _rec_name='partner_id'
    _columns ={
           'partner_id':fields.many2one('res.partner','Name'),
           'internal_number':fields.related(
                   'partner_id',
                   'ref',
                   type='char',
                   size=16,
                   string='Internal Number',
                   ),
           }

Если поле, которое мы хотим показать как связанное поле, является полем выбора, то вы должны предоставить type='selection' и selection=[(case1,case1),(case2,case2),...] список кортежей. Если это поле many2one, то type='many2one' и relation='model_name'.

person OmaL    schedule 29.11.2011
comment
'country_id':fields.related('partner_id', 'country_id', type='many2one',relation='res.country', string='Country'), - person OmaL; 16.02.2015

Вы можете найти пример в документации для разработчиков OpenERP, в нормализации базы данных он называется Transitive dependency.

person Cristian Salamea    schedule 09.05.2011

связанные поля приводят элемент управления к другой таблице, родительская таблица будет иметь отношение «один к одному» с дочерней таблицей, а дочерняя таблица будет иметь отношение «многие к одному» к родительской таблице. например: account.invoice на account.invoice.line со следующим полем

'invoice_line': fields.one2many('account.invoice.line', 'invoice_id', 'Строки счета', readonly=True,states={'draft':[('readonly',False)]}),

и account.invoice.line относится к account.invoice со следующим кодом в обратном порядке.

'invoice_id': fields.many2one('account.invoice', 'Ссылка на счет-фактуру', ondelete='cascade', select=True),

person Pravitha V    schedule 19.04.2012