odoo one2many就像很多人一样

时间:2015-10-28 23:10:19

标签: python openerp odoo

我创建了一个关系one2many / many2one:

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链接,但事实并非如此。我能够创建具有相同名称和不同属性的两个人记录,我不会那样......

2 个答案:

答案 0 :(得分:1)

你的帖子令人困惑。查看您的模型,一个dev_person记录确实只能与一个dev_property相关联。同时,您确实能够创建具有相同名称和不同属性的两个人记录。 - 这与many2one关系无关。如果您创建两个具有相同名称的人,则他们仍然是两个完全不同的dev_person个对象。他们不是同一个人。当然,您可以将它们与不同的dev_property s。

相关联

如果要阻止此操作,请声明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!",
        ),
    ]

答案 1 :(得分:1)

从你的问题我明白,你想要人和财产。每个人都必须拥有一处房产。没有两个人可以拥有相同的名字。

令人困惑的部分是: -

  • 那你为什么要在 dev.property 中用参考定义 one2many 字段 到 dev.person

如果您打算查看与此属性相关联的人员,则可以使用one2many功能字段。

为此,请尝试以下代码: -

    $data = array(
        'title'=>$title,
        'description'=>$des
    );
    $this->db->insert('page',$data);
    $page_id = $this->db->insert_id();

    //To pass page_id to url column
    $this->db->where('page_id', $page_id);
    $data_1 = array('url'=>'page/view/'.$pageid);
    $this->db->update('page', $data_1);

希望这有帮助。