Как добавить автоинкрементное поле в OpenERP 7?

Я искал и модифицировал исходный код простого пользовательского модуля openerp, ниже привожу код

инициализация.py

import sim

openerp.py

{
'name': 'Student Information Management',
'version': '0.1',
'category': 'Tools',
'description': """This module is for the Student Information Management.""",
'author': 'Mr Praveen Srinivasan',
    'website': 'http://praveenlearner.wordpress.com/',
'depends': ['base'],
'data': ['sim_view.xml'],
'demo': [],
'installable': True,
    'auto_install': False,
    'application': True,
}

sim_view.xml

<?xml version="1.0"?>
<openerp>
<data>
<!-- ============== student================= -->
<!-- 1st part of the sim_view start-->
<record model="ir.ui.view" id="student_form">
<field name="name">Student</field>
<field name="model">sim.student</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Student" version="7.0">
<group>
<field name="reg_no"/>
<field name="student_name"/>
<field name="father_name"/>
<field name="gender"/>
<field name="contact_no"/>
<field name="address"/>
</group>
</form>
</field>
</record>
<!-- 1st part of the sim_view end-->

<!--2nd part of the sim_view start-->
<record model="ir.ui.view" id="student_tree">
<field name="name">Student</field>
<field name="model">sim.student</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Student">
<field name="reg_no"/>
<field name="student_name"/>
<field name="father_name"/>
<field name="gender"/>
<field name="contact_no"/>
<field name="address"/>
</tree>
</field>
</record>
<!--2nd part of the sim_view end-->

<!-- 3rd part of the sim_view start-->
<record model="ir.actions.act_window" id="action_student">
<field name="name">Student</field>
<field name="res_model">sim.student</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<!--3rd part of the sim_view end-->

<!--4th part of the sim_view start-->
<menuitem name="SIM/Student/StudentInfo" id="menu_sim_student"  
      action="action_student"/>
<!--4th part of the sim_view end-->
</data>
</openerp>

sim.py

**

    from openerp.osv import fields, osv
    class student(osv.osv):
        _name = "sim.student"
        _description = "This table is for keeping personal data of student"
        _columns = {
            'reg_no': fields.integer('Registration Number',size=7,required=True),
            'student_name': fields.char('Student Name',size=25,required=True),
            'father_name': fields.char("Father's Name",size=25),
            'gender':fields.selection([('male','Male'),('female','Female')],'Gender'),
            'contact_no':fields.char('Contact Number',size=10),
            'address':fields.char('Address',size=256)
        }
        _sql_constraints = [
        ('uniq_name', 'unique(reg_no)', 'This Reg.No is number already registered!') 
        ]

    student()

**

Все работает хорошо, но я хочу добавить поле идентификатора регистрации с автоматическим увеличением. Я искал в Интернете, как это сделать, но я не могу найти правильное решение. Пожалуйста помогите.


person Praveen Srinivasan    schedule 18.03.2014    source источник
comment
я не понимаю правильно. вы хотите, чтобы ваше поле reg_no увеличивалось при создании записей? например, имена заказов на продажу увеличиваются?   -  person CZoellner    schedule 18.03.2014


Ответы (2)


После создания файла последовательности вы можете добавить эту функцию в свой sim.py.

def create(self, cr, uid, vals, context=None):
    sequence=self.pool.get('ir.sequence').get(cr, uid, 'reg_code')
    vals['reg_no']=sequence
    return super(student, self).create(cr, uid, vals, context=context)

Эта функция будет работать правильно

person Atul Jain    schedule 19.03.2014
comment
Я могу подтвердить, что это работает лучше всего. Другой ответ всегда пропускает число, т. е. выглядит как 0001, 0003 и т. д. - person Aron Lorincz; 29.08.2015

Создайте запись в ir.sequence. Сначала сделайте поле reg_no char.

<record id="seq_type_1" model="ir.sequence.type"> 
  <field name="name">REG Type</field> 
  <field name="code">reg_code</field> 
</record> 
<record id="seq_1" model="ir.sequence"> 
    <field name="name">reg</field> 
    <field name="code">reg_code</field> 
    <field name="prefix">REG</field> 
    <field name="padding">3</field> 
</record>

В вашем файле py вы можете определить, когда генерировать последовательность. Либо по умолчанию, чтобы получить номер регистрации по умолчанию, либо переопределить метод создания и вызвать последовательность, либо любым другим методом:

_defaults = { 'reg_no': лямбда obj, cr, uid, контекст: obj.pool.get('ir.sequence').get(cr, uid, 'reg_code'), }

person OmaL    schedule 19.03.2014