2015-10-28 3 views
0

Я создал отношения one2many/many2one:odoo one2many действует как many2many

class dev_person(Model): 
    _name = "dev.person" 
    _description = "Person" 
    _columns = { 
     'name': fields.char('Person', size=128, required=True), 
     'properties': fields.many2one('dev.property', 'property_id', select=True), 
     } 

class dev_property(Model): 
    _name = "dev.property" 
    _description = "Property" 
    _columns = { 
     'name': fields.char('Property', size=128, required=True), 
     'property_id': fields.one2many('dev.person', 'properties'), 
     } 

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

ответ

1

Ваше сообщение в замешательстве. Глядя на ваши модели, одна запись dev_person действительно может быть связана только с одним dev_property. В то же время верно, что вы «можете создать записи двух человек с тем же именем и другим свойством» - это не имеет ничего общего с отношениями many2one. Если вы создаете двух людей с тем же именем, они все еще два совершенно разных объекта dev_person. Это не тот человек. Конечно, вы можете связать их с разными dev_property.

Если вы хотите заблокировать это, объявите поле name уникальным. Таким образом, вы не сможете создать двух людей с одинаковым именем (убедитесь, что это действительно то, что вы хотите, поскольку в реальной жизни есть разные люди с тем же именем).

class dev_person(Model): 
    _name = "dev.person" 
    _description = "Person" 
    _columns = { 
     'name': fields.char('Person', size=128, required=True), 
     'properties': fields.many2one('dev.property', 'property_id', select=True), 
     } 

    _sql_constraints = [ 
     (
      'dev_person_name_uniq', 
      'unique(name)', 
      "You can't have two people with the same name!", 
     ), 
    ] 
+0

Я вижу вашу точку зрения. Это всего лишь демонстрационный модуль, я пытаюсь понять, как все работает. Вместо имени, это может быть ID_number или что-то, что имеет больше смысла ... Тем не менее, я добавил это ограничение, но я все еще могу создавать повторяющиеся имена ... – Urosh

+0

Точка в том, что один человек не должен иметь два разных свойства , отключить добавление новой записи с тем же именем и другой записью – Urosh

+0

Убедитесь, что нет людей с дублирующимися именами уже при обновлении вашего модуля, иначе уникальное ограничение не удастся. –

1

С вашего вопроса я понял, что вы хотите, чтобы человек и собственность. И каждый человек должен иметь одно имущество. Ни одно из двух человек не может иметь одно и то же имя.

Смешение часть: -

  • Тогда почему вы определили one2many поле в dev.property со ссылкой на dev.person

Если вы задумали просмотрите лиц, связанных с этим имуществом, вы можете использовать одно функциональное поле.

Для этого, пожалуйста, попробуйте этот код: -

from openerp.osv import fields, osv 
class dev_person(osv.osv): 
_name = "dev.person" 
_description = "Person" 
_columns = { 
    'name': fields.char('Person', size=128, required=True), 
    'properties': fields.many2one('dev.property', 'property_id', select=True), 
    } 
_sql_constraints = [ 
    ('name_uniq','unique(name)', 'You cannot have two people with the same name !') 
    ] 


class dev_property(osv.osv): 
_name = "dev.property" 
_description = "Property" 
def _compute_persons(self, cr, uid, ids, name, args, context=None): 
    ''' This function will automatically computes the persons related to particular property.''' 
    result = {} 
    person_obj = self.pool.get('dev.person') 
    for person_data in self.browse(cr, uid, ids, context=context): 
     person_ids = person_obj.search(cr, uid, [('standard_id', '=', person_data.id)], context=context) 
     result[person_data.id] = person_ids 
    return result 
_columns = { 
    'name': fields.char('Property', size=128, required=True), 
    'person_ids': fields.function(_compute_persons, method=True, relation='dev.person', type="one2many", string='Persons'), 
    } 

Надеется, что это помогает.

 Смежные вопросы

  • Нет связанных вопросов^_^