Archive

Archive for October, 2010

openerp – how to add a custom field to an object

October 4, 2010 15 comments

Adding a custom field to an existing object it’s as easy as the following few lines of code.

Let’s say you want to add a field to partner. Create a partner.py file into your module and add the following to it:

from osv import fields,osv

class res_partner(osv.osv):

    _inherit = 'res.partner'

    _columns = {
           'mytext':fields.char('My custom text field',size=64),
    }

res_partner()

Now, if you want to display this field into partner’s view you have to override the form view.

Create a partner_view.xml into your module and add:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <record id="mypartner_form" model="ir.ui.view">
            <field name="name">partner.myform</field>
	        <field name="model">res.partner</field>
	        <field name="type">form</field>
	        <field name="inherit_id" ref="base.view_partner_form"/>
            <field name="arch" type="xml">
               <field name="name" position="after">
                    <field name="mytext" />
               </field>
            </field>
        </record>
    </data>
</openerp>

Then you’ll need to install your module or to upgrade it if already installed.

See openerp docs for further info.

Categories: openerp, openobject, python

Una vista per tutte

October 3, 2010 Comments off

in un progetto sul quale ho lavorato di recente c’erano parecchi pacchetti. Uno di questi definiva alcune proprietà dell’utente e un set di metodi per poter accedere a tali proprietà.

Si aveva l’esigenza di richiamare questi metodi da tutti gli altri pacchetti del progetto in maniera da duplicare il meno possibile il codice.

Allora ho pensato di definire proprio come fa plone (plone_portal_state, plone_context_state, ecc) una vista accessibile ovunque che mettesse a diposizione il suddetto set di metodi.

Definiamo la vista:

<browser:page
 name="myhelpers_view"
 for="*"
 class="views.HelpersView"
 permission="zope2.View"
 />

 

class HelpersView(BrowserView):
    """
    HelpersView browser view
    """

    def getFoo(self):
        foo = 'boo'
        return foo

    def doThis(self):
        #do this and that
        return True

    def getThat(self):
        return self.context.stuff

Potremo poi accedere a tali metodi da tutte le altre viste (ma anche portlets e altro) richiamando la nostra vista (che è un named multi-adapter) grazie a “getMultiAdapter”, proprio come si fa con plone_portal_state:

from zope.component import getMultiAdapter

class MyOtherView(BrowserView):

    [...]

    @property
    def my_helpers(self):
        return getMultiAdapter((self.context, self.request), name=u'myhelpers_view')

e potrò utilizzare i suoi metodi nel sequente modo:

def do_this(self):
    foo = self.my_helpers.getFoo()
    [...]

Analogamente, potró richiamarla nei template cosí:

<div tal:define="helpers context/@@my_helpers_view">
    <span tal:content="helpers/getThis" />
</div>
Categories: helpers, plone, python