2012-12-16 2 views
1

у меня есть это:OpenERP Сравнивая другое значение поля объекта с полем объекта

class events_places(osv.osv): 

    """Places for events""" 
    _name = 'oevents.places' 
    _columns = { 
     'name': fields.char('Name',size=35, help='Place\'s name', required = True), 
     'description': fields.char('Description',size=50, help='Place\'s description'), 
     'street': fields.char('Street',size=35, help='Place\'s street', required = True), 
     'number': fields.integer('Local number', help='Place\'s local number', required = True), 
     'zip': fields.char('Zip Code', size=5, help='Place\'s Zip code', required = True), 
     'city': fields.char('City',size=20, help='Place\'s city', required = True), 
     'country': fields.many2one('res.country', 'Country', help='Place\'s country'), 
     'state': fields.many2one('res.country.state','State', help='Place\'s state'), 
     'inWinter': fields.boolean('Active in winter', store = True, help='Place\'s province'), 
    } 
    _defaults = { 
     'inWinter' : True, 
    } 

class events_events(osv.osv): 

    """Client's contacts""" 
    _name = 'oevents.events' 
    _columns = { 
     'name': fields.char('Name',size=20, help='Event\'s name', required = True), 
     'place': fields.many2one('oevents.places','Place', help='Event\'s location', required = True), 
     'artist': fields.many2one('oevents.artists','Artist', help='Artist\'s performing in the event.', required = True), 
     'client': fields.many2one('res.partner','Client', help='Event\'s clients.', required = True), 
     'date': fields.date('Date', help='Event\'s date.', required = True), 
     'type': fields.selection([('children','Children\'s'),('private','Private'),('concert','Concert')],'Event type', help='Type of event this artist can do'), 
    } 
    _defaults = { 
     'type' : 'private' 
    } 

Когда я хочу, чтобы создать событие, есть поле, связанные с местом. Событие имеет дату, но это не должно позволять мне создавать событие в зимнюю дату, если в соответствующем поле места в событии есть поле inWinter unchecked.

Как я могу это сделать? Мне нужно создать функцию или ограничение, которое попадает в полеWinter и сравнивает его с датой, но я не знаю, как это сделать. Какие-либо предложения?

Заранее благодарен!

+0

Вы хотите скрыть свое поле «date», когда inWinter = True? –

+1

Нет, извините, я думаю, что не объяснял себя правильно. Мне нужно, если я попытаюсь создать событие в зимние месяцы, openerp должен показать ошибку, если место, связанное с событием, имеет inWinter field unChecked (False). – gorri

ответ

1

Вы можете переопределить метод создания &. В этих методах просто проверьте, имеет ли значение «inWinter» значение True или False.

Метод def create() будет вызываться, когда будет создана новая запись.

def create(self, cr, uid, vals, context=None): 
    if vals.get('place'): 
     event_brw = self.pool.get('oevents.places').browse(cr, uid, vals.get('place'), context=context) 
     #if inWinter is True 
     if event_brw.inWinter: 
      raise osv.except_osv('Error ! ', 'You can not create an event in winter.') 
    return super(oevents_events, self).create(cr, uid, vals, context) 

Метод def write() будет вызываться, когда запись будет изменена.

def write(self, cr, uid, ids, vals, context=None): 
    if vals.get('place'): 
     event_brw = self.pool.get('oevents.places').browse(cr, uid, vals.get('place'), context=context) 
     #if inWinter is True 
     if event_brw.inWinter: 
      raise osv.except_osv('Error ! ', 'You can not create an event in winter.') 
    return super(oevents_events, self).write(cr, uid, ids, vals, context) 
+0

Спасибо! Это сделало работу :) – gorri

+1

@gorri: Больше всего приветствую. Если мой код работал в соответствии с вашим требованием, вы должны «принять» мой ответ, чтобы завершить поток. –

1

вы должны написать функцию on_change в поле «дата», где вы вызываете ошибку, если заданная дата находится в зимних месяцах, а isWinter - false. Конечно, вам нужно определить дату диапазона для iswinter, чтобы поставить on_change в определении поля в вашем представлении xml.

+0

Привет, спасибо за информацию :). Я просто новый, и я понятия не имею, как получить значение isWinter из объекта объектов. Можете ли вы рассказать мне, как это сделать? – gorri

+0

isWinter - ваш inWinter поле. Я просто опечатка. Сожалею. – user1888049

1

Вы должны использовать ограничения. grep addons для _constraints и _sql_contraints, и вы найдете много примеров.

0

Идём на _constraints=, не рекомендуется звонить по телефону create и write.