添加产品唯一性限制以后,复制按钮不能使用

使用api.constrains限制了产品的name,目的是让产品的名称唯一,但没想到的是使用复制的时候,会报错,说是已经存在的产品名称,去掉限制以后发现产品名称只有一个,复制出来的产品名称后会有一个副本的标识,可是为什么会报这样的一个错误呢?

经过一番研究,发现点击复制按钮以后,会调用两次contrains的check方法,一次使用的是产品名称(副本),第二次使用的是产品名称,然后使用search方法搜索,得到的结果居然是2个!

为什么会调用两次check方法呢?后来在父类的copy方法中找到了原因

def copy(self, cr, uid, id, default=None, context=None):
        """ copy(default=None)

        Duplicate record with given id updating it with default values

        :param dict default: dictionary of field values to override in the
               original values of the copied record, e.g: ``{‘field_name‘: overridden_value, ...}``
        :returns: new record

        """
        if context is None:
            context = {}
        context = context.copy()
        data = self.copy_data(cr, uid, id, default, context)
        new_id = self.create(cr, uid, data, context)
        self.copy_translations(cr, uid, id, new_id, context)
        return new_id

Copy方法在创建了新的record以后,又调用了copy_translations方法,没猜错的话,问题应该出在这儿:

def copy_translations(self, cr, uid, old_id, new_id, context=None):
               ……………………
                for record in trans_obj.read(cr, uid, trans_ids, context=context):
                    del record[‘id‘]
                    # remove source to avoid triggering _set_src
                    del record[‘source‘]
                    record.update({‘res_id‘: target_id})
                    if user_lang and user_lang == record[‘lang‘]:
                        # ‘source‘ to force the call to _set_src
                        # ‘value‘ needed if value is changed in copy(), want to see the new_value
                        record[‘source‘] = old_record[field_name]
                        record[‘value‘] = new_record[field_name]
                    trans_obj.create(cr, uid, record, context=context)

奇怪的是这里边并没有涉及到跟constrains有关的代码,倒是record比较令人怀疑。输出record会看到{‘name‘:‘product.template,name‘}类似的值,但不清楚为什么translation会触发contrains.

时间: 2024-08-06 20:10:35

添加产品唯一性限制以后,复制按钮不能使用的相关文章

【博客美化】08.添加"扩大/缩小浏览区域大小" 按钮

博客园美化相关文章目录: [博客美化]01.推荐和反对炫酷样式 [博客美化]02.公告栏显示个性化时间 [博客美化]03.分享按钮 [博客美化]04.自定义地址栏logo [博客美化]05.添加GitHub链接 [博客美化]06.添加QQ交谈链接 [博客美化]07.添加打赏按钮 [博客美化]08.添加"扩大/缩小浏览区域大小" 按钮 1.页首添加HTML代码 进入自己的博客园->设置,将以下html代码添加到“页首Html代码” <div id="divExpan

在GridView中添加产品

如图是效果图 定义一个 GridView 再在上面添加 产品 先定义产品的适配器 1 package org.xml.demo; 2 3 import ogg.huanxin.huadong.R; 4 import android.content.Context; 5 import android.view.LayoutInflater; 6 import android.view.View; 7 import android.view.ViewGroup; 8 import android.w

添加navbar以及上面的左右按钮代码

UINavigationBar *navBar = [[UINavigationBaralloc] initWithFrame:CGRectMake(0, 0, 824, 44)]; navBar.barStyle = UIBarStyleDefault; UINavigationItem *navItem = [[UINavigationItemalloc] init]; navItem.leftItemsSupplementBackButton = YES; navItem.title =

如何在html添加一个搜索框和一个按钮?

<INPUT TYPE="text" id="k"><INPUT TYPE="button" VALUE="ok" ONCLICK="xx()">   <SCRIPT LANGUAGE="JavaScript">   <!--   function xx(){ var k=document.getElementById("k"

Eclipse 复制按钮卡死

复制按钮和按住CTRL链着超链接 有冲突,Eclipse不知道是复制还是链到元素,所以卡死 Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法 最近在MyEclipse中编辑代码时,使用快捷键进行复制粘贴,经常会导致编辑器短暂的停顿,光标不跟随,居然反应不过来,几近假死. 想来想去应该是编辑上的什么配置或者是IDE的什么功能导致,于是进入Preferences查找edit功能,进行一个个的测试,最后发现原来是代码的超链功能导致. 进入方法:Window -> Preferences

微信分享代码之在网页中添加“分享到微信朋友圈”按钮的代码分享

微信分享代码之在网页中添加“分享到微信朋友圈”按钮的代码分享 由于目前微信并没有提供这个按钮的官方支持,很多人问我们这个按钮是如何实现的,其实很简单,我们把我们实现的方法分享给大家,希望对那些想在网页端加这个按钮的人有所帮助. 下面是代码(相关参数请自行修改): function WeiXinShareBtn() { if (typeof WeixinJSBridge == "undefined") { alert("请先通过微信搜索 添加分享组件提供商友推为好友,通过微信分

JS 点击复制按钮 将文字复制到手机剪贴板

我们在制作移动端网页的时候,经常会遇到这样一个问题,如何点击一个"复制"按钮,把一串文字复制到手机剪贴板,如上图所示. 看了网上的一些方法后,感觉那些方法都太复杂,有点要用插件,有的需要安装flash,但是这些对于手机等移动设备都不太合适,那么有没有一个简单点的办法呢? 今天,我们就来介绍一个简单实用的好方法: ①首先,我们把需要复制的部分 做成一个readonly的input, ②复制按钮的id 我这里设置成:js-copy-text, ③js如下: <script> $

解决magento添加产品在前台不显示问题

有时候我们在magento系统添加产品,前台不显示,最模板分析可能 以下几个原因: 1 添加新品要重新index一下,magento是静态的.html页面,不reindex不出来的.在System→Index Management里面,全选后点Reindex.2 产品有很多属性影响是否前台显示: qty:数量为0前台不显示. is_in_stock:no的话前台不显示. status:disable的话前台不显示 visibility:none的话前台不显示. 3 有的时候,如果你操作不当,ca

js复制按钮在ie下的解决方案

源码如下: <input class="width200" maxlength="32" type="text" id="strNum" name="strNum" value="这是要复制的内容"/> <input class="btn_blue" type="button" value="点击复制" onc