在OpenErp 7中查询对象

时间:2016-06-21 23:41:41

标签: python openerp openerp-7

我有两个对象,'文章'和'mvt',我试图创建的模块背后的逻辑是文章是由名称和价格定义的,但数量是通过一组交易或' mouvements',每个mouvement都有很多2个文章,一个日期和一个qte,最后一个字段可以是正面或负面(正面意味着我们添加了新文章,负面相反),所以这里是我以前的代码这个,我是openErp的新手。

class article(osv.osv):

_name = 'cm.article'

def _get_qte(self, cr, uid, ids, fld_name, arg, context=None):
    result = {}
    mvtObject=self.pool.get('cm.mvt')
    mvtids=mvtObject.search(cr,uid,[])
    sum = 0
    for id in mvtids:
        mvt_line=mvtObject.browse(cr,uid,id,context)
        if mvt_line.article.id == ids[0]:
            sum = sum + mvt_line.qte
    result[sum] = sum
    return result
_columns = {
        'name': fields.char(size=32, string='Nom', required=True),
        'pu':fields.float(required="True",string='Prix Unitaire'),
        'qte': fields.function(_get_qte,type='integer',obj="cm.article",method=True,string='Quantity'),
}
article()


class mvt(osv.osv):
    _name = 'cm.mvt'
    _columns = {
        'article' : fields.many2one('cm.article', 'name'),
        'date' : fields.datetime(string="Date Mouvement"),
        'qte':fields.integer(String="Quantity")
    }
    _defaults = {'date' : fields.date.context_today}
mvt()

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我们做了一些非常相似的事情并且运作得很好。

请注意,在大量事务之后,代码将变慢,因为每次打开表单时都必须重新计算。您必须编写一个“清除”向导,该向导将汇总超过三年的交易。这一切都取决于交易数量和当地立法。

要访问每笔交易的动作,请在文章模型的列中添加以下行:

compile 'io.branch.sdk.android:library:1.14.2'

我还建议你在mvt类中添加一个描述字段:

'art_movements':fields.one2many('cm.history', 'article', 'Movements'),

要查看所有数据,您将使用如下所示的xml:

'name':fields.char('Short movement description'),

我的猜测是问题的原因起源于函数字段,因为两个表之间没有链接。上面的代码应该修复它,但你的函数字段不正确,见下文(你必须验证代码,因为我没有测试它,但原理是正确的。)

<record model="ir.ui.view" id="view_articles_form">
    <field name="cm.article">Articles.form</field>
    <field name="model">cm.article</field>
    <field name="type">form</field>
    <field name="arch" type="xml">
        <form string = "Articles" version="7.0" create="false" edit="false">
            <sheet>
                <group>
                    <field name="name"  readonly="True"/>
                    <field name="pu"  readonly="True" />
                    <field name="qty"  readonly="True"/>
                </group>
                <field name="art_movements">
                    <tree string="History" default_order="date">
                        <field name="name"/>
                        <field name="date"/>
                        <field name="qte"/>
                    </tree>
                </field>
            </sheet>
        </form>
    </field>
</record>

请注意,如果art_movements中没有记录,则会返回零值。