Python 2.7 使用系统管理员以外的用户时,odoo ir.sequence不工作

Python 2.7 使用系统管理员以外的用户时,odoo ir.sequence不工作,python-2.7,odoo,Python 2.7,Odoo,我正在做Openerp7 我尝试将附件转换为保存在服务器中的文件,而不是保存在数据库中 我的问题是命名文件 我正试图用ir.sequence给她的名字加上一个序列号 当我使用系统管理员登录时,它工作正常 但是当使用任何其他用户登录时:ir.sequence不会创建序列 函数create返回False 我的xml代码: <record id="ir_attachment" model="ir.sequence.type">

我正在做Openerp7 我尝试将附件转换为保存在服务器中的文件,而不是保存在数据库中

我的问题是命名文件 我正试图用ir.sequence给她的名字加上一个序列号

当我使用系统管理员登录时,它工作正常 但是当使用任何其他用户登录时:ir.sequence不会创建序列 函数create返回False

我的xml代码:

    <record id="ir_attachment" model="ir.sequence.type">
        <field name="name">ir attachment</field>
        <field name="code">ir.attachment</field>
    </record>

    <record id="seq_ir_attachment" model="ir.sequence">
        <field name="name">ir attachment</field>
        <field name="code">ir.attachment</field>
        <field name="prefix">Att</field>
        <field name="padding">5</field>
        <field name="implementation">no_gap</field>
    </record>

红外附件
红外附件
红外附件
红外附件
Att
5.
无间隙
python代码:

数据记录写入({'filename':self.pool.get(“ir.sequence”).get(cr,uid,'ir.attachment'))

get
方法返回
False
,因为
ir.attachment
公司不存在于当前可见的公司中,并且与
False
不同(设置为默认值)

get
方法将通过调用该方法结束,如果我们提供空的序列ID列表(
seq\u id
),该方法将返回
False

序列ID列表(
ids
)的计算如下所示:

company\u id=self.pool.get('res.company').search(cr,uid,[],context=context)+[False]
id=self.search(cr、uid、['&'、('code'、'=',序列号),('company_id'、'in',company_id)])
当您使用系统管理员登录时,它可以正常工作,因为超级用户绕过安全规则,可以查看所有可用的公司,但用户只能根据规则选择当前可见的公司

选择当前用户的可见公司后,OpenERP将
False
添加到该列表中(这意味着如果序列
公司id
,则与传递给
搜索方法的代码相对应的序列id将始终返回,而不取决于用户设置),它将尝试查找序列id,其中序列代码等于传递给
get
方法的序列代码,并且所选公司中存在
company\u id

如果序列
公司id
字段值在用户当前可见的公司中不存在,它将返回一个空列表,
\u next
方法将返回
False
,因为
序列id
为空

def\u next(self、cr、uid、seq\u id、context=None):
如果不符合下列ID:
返回错误
在搜索结果中包括用户允许的公司:

res company搜索方法已更改,通过传递
user\u首选项
抛出上下文,可以返回用户company及其所有允许的company

您可以在
res.company
方法中找到一条注释,其中突出显示:

if context.get('user_preference'):
#我们以超级用户的身份浏览。否则,用户将能够
#仅选择当前可见的公司(根据规则,
#这可能是允许看到的子公司)即使
#她属于其他一些公司。
user=self.pool.get('res.users').browse(cr,超级用户ID,uid,context=context)
cmp_id=列表(设置([user.company_id.id]+[user.company_id中cmp的cmp.id]))
返回cmp_ID
例如:

如果上下文为无:
上下文={}
上下文[“用户偏好”]=真
self.pool.get(“ir.sequence”).get(cr,uid,'ir.attachment',context=context)
在服务器文件系统中存储附件的替代方法:

要在OpenERP服务器文件系统中存储文件,可以安装文档管理系统

OpenERP-7的文档
如果未安装文档管理系统,则附加到OpenERP资源的文件将直接存储在数据库中。安装文档管理系统后,文件内容不再存储在数据库中,而是存储在OpenERP服务器文件系统中名为“filestore”的目录中

然后,您可以使用简单的拖放操作,在完全独立于OpenERP接口或FTP服务器的情况下读取附件并将其添加到OpenERP资源中