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