我正在尝试在 PostgreSQL 中恢复集群备份。我使用了 pg_dumpall,它生成了一个带有 SQL 查询的纯文本文件。但是,当我尝试恢复它时,出现此错误:
pg_restore: [archiver] 输入文件似乎不是有效的存档
当我尝试恢复数据库的备份(用 pg_dump 生成)时,我也收到了同样的错误,但我解决了这个问题。在那种情况下,pg_restore 无法通过 SQL 查询识别纯文本,因此我更改了命令:
pg_dump db_name -Fc -U user -h host -p port > my_db_backup.dump
Run Code Online (Sandbox Code Playgroud)
而是写道:
pg_dump db_name -Fp -U user -h host -p port > my_db_backup.dump
Run Code Online (Sandbox Code Playgroud)
这样生成的文件不是纯文本,所以 pg_restore 可以很好地处理它。
现在,我正在尝试使用 pg_dumpall 进行相同的管理,但是没有 -F 参数。我的代码(在 Python3 中,但此命令对于任何语言都是相同的)是:
pg_dumpall -U user -h host -p port > my_cluster_backup.dump
Run Code Online (Sandbox Code Playgroud)
知道如何管理这个吗?或者至少如何以任何方式恢复集群备份?先感谢您!
编辑
如果我使用psql来恢复:
psql -U user -h host -p port -f my_cluster_backup.dump postgres'
Run Code Online (Sandbox Code Playgroud)
它似乎有效,控制台中显示了很多命令,但每个命令都给出了“它已经存在”的错误。我无法理解,因为我有两个集群(端口 5432 和 5433),我猜它正在尝试在 5432 中恢复,当我确定我已连接到 5433 时。以前有人遇到过这个问题吗?
如何更改sale.order.line的不同树的默认排序顺序
例如:按名称排序
<record id="_view_sale_order_line_tree" model="ir.ui.view">
<field name="name">sale.order.line.tree1</field>
<field name="model">sale.order.line</field>
<field name="type">tree</field>
<field name="priority" eval="1"/>
<field name="arch" type="xml">
<tree string="Sales Order Lines" >
<field name="name"/>
<field name="sequence"/>
</tree>
</field>
</record>
Run Code Online (Sandbox Code Playgroud)
按顺序排序
<record id="_view_sale_order_line_tree2" model="ir.ui.view">
<field name="name">sale.order.line.tree2</field>
<field name="model">sale.order.line</field>
<field name="type">tree</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<tree string="Sales Order Lines" >
<field name="order_id"/>
<field name="sequence"/>
</tree>
</field>
</record>
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 XMLRPC 从 Odoo 获取一些数据,并且正在使用 PHP 及其 Ripcord 库(在https://www.odoo.com/documentation/8.0/api_integration.html上推荐)。
所以我按照该页面上写的步骤进行操作。
首先,我从https://github.com/poef/ripcord.git下载了 Ripcord 文件。我将它们保存在名为ripcord的文件夹中,该文件夹位于我的 PHP 页面的索引目录中。
其次,我启用了 PHP7 的 OpenSSL 和 XMLRPC 扩展。我认为我做得很好,因为如果我执行下一句话:
$modules = get_loaded_extensions();
foreach ($modules as $module) {
echo $module.', ';
}
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
核心、日期、libxml、openssl、pcre、zlib、过滤器、哈希、反射、SPL、会话、标准、apache2handler、mysqlnd、PDO、xml、日历、ctype、curl、dom、mbstring、fileinfo、ftp、gd、gettext、 iconv、json、exif、mcrypt、mysqli、pdo_mysql、Phar、posix、readline、shmop、SimpleXML、套接字、sysvmsg、sysvsem、sysvshm、分词器、wddx、xmlreader、xmlrpc、xmlwriter、xsl、Zend OPcache、
现在,这是我的index.php 的代码:
$url = 'http://localhost:30080';
$db = 'db_v80_test_01';
$username = 'admin';
$password = 'adminpwd';
require_once('ripcord/ripcord.php');
// $info = ripcord::client($url)->start();
// list($url, $db, $username, $password) = array($info['host'], $info['database'], $info['user'], $info['password']);
$common = ripcord::client($url.'/xmlrpc/2/common');
$uid …Run Code Online (Sandbox Code Playgroud) 我创建了一个名为 的新模型product.service.type。然后,在product.product模型中,我还创建了一个Many2many字段(名为service_type,指向product.service.type模型)。
现在我有了 model test,它有product_id和service_type_id字段,分别Many2one指向product.product和product.service.type。
我想要的是,如果您选择一个产品,服务类型域将更改为仅显示所选产品的服务类型。我通过以下方式做到了这一点onchange:
def onchange_product_id(self, cr, uid, ids, product_id, context=None):
if product_id:
product = self.pool.get('product.product').browse(
cr, uid, [product_id], context=context)
service_type_ids = product.service_type.mapped('id')
return {
'domain': {
'service_type_id': [('id', 'in', service_type_ids)],
},
}
Run Code Online (Sandbox Code Playgroud)
这很好用,问题是当您编辑记录(而不是创建新记录)时,因为在这种情况下,onchange未执行记录,因此域显示所有服务类型。
您可以在合作伙伴表单中使用字段看到同样的问题title。新建一个合作伙伴,该合作伙伴是公司,字段的域title发生变化,只允许选择Corp.、Ltd.等记录,但如果设置合作伙伴是联系人,则可以选择Doctor、Madam等记录现在,将您想要的数据保存到伙伴中,然后转到顶部栏的其他菜单。返回合作伙伴表单并打开创建的合作伙伴进行编辑。检查title字段而不更改is_company字段。现在您拥有所有可用的头衔,尽管您的合作伙伴属于特定类别(公司或联系人)。 …
我正在尝试在CRM模块的机会部分对客户进行分组。
我想在上分组客户/机会industry。
我已经使用过类似的代码res.partner,但我无法解决这一问题!
models.py
x_industry_id = fields.Many2one(string="Industry", comodel_name="res.partner")
Run Code Online (Sandbox Code Playgroud)
views.xml
<record id="view_crm_case_opportunities_filter_inherit" model="ir.ui.view">
<field name="name">crm.lead.search.opportunity</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/>
<field name="arch" type="xml">
<xpath expr="//search" position="inside">
<filter name="x_industry_id" string="Industry" context="{'group_by':'x_industry_id'}" domain="[('industry_id','!=', False)]"/>
</xpath>
</field>
</record>
Run Code Online (Sandbox Code Playgroud)
对于使用相同方法的过滤器和其他组,我也遇到相同的问题。
它们只是看起来不正常!
如何将群组和过滤器应用于不同的模型
我正在使用一个名为env执行 Odoo 的 Python virtualenv。在 virtualenvbin目录中,我得到了这个:
pip
pip3
pip3.8
python -> /usr/bin/python3
python3 -> python
python3.8 -> python
Run Code Online (Sandbox Code Playgroud)
Odoo 服务正在运行此命令来执行 Odoo(如您所见,使用python3.8virtualenv 的):
ExecStart=/opt/odoo/env/bin/python3.8 /opt/odoo/odoo_13/src/oca/OCB/odoo-bin -c /opt/odoo/odoo_13/config/.odoo.conf
Run Code Online (Sandbox Code Playgroud)
问题是,Odoo 时不时地会给出以下严重错误,并且实例停止工作:
ModuleNotFoundError:没有名为“werkzeug”的模块
似乎该werkzeug软件包尚未安装,但是,如果我执行以下操作:
anubia@my-server:/opt/odoo$ . env/bin/activate
(env) anubia@my-server:/opt/odoo$ which pip
/opt/odoo/env/bin/pip
(env) anubia@my-server:/opt/odoo$ which pip3
/opt/odoo/env/bin/pip3
(env) anubia@my-server:/opt/odoo$ which pip3.8
/opt/odoo/env/bin/pip3.8
(env) anubia@my-server:/opt/odoo$ pip3.8 install werkzeug
Requirement already satisfied: werkzeug in ./env/lib/python3.8/site-packages (0.11.15)
(env) anubia@my-server:/opt/odoo$ cd env/lib/python3.8/site-packages/
Display all 125 possibilities? (y or n)
Babel-2.9.1.dist-info/ …Run Code Online (Sandbox Code Playgroud) 我需要的
如果用户单击我的按钮,则根据当前记录的字段将他带到不同模型的不同视图。
我做了什么
我已经声明了一个类型对象按钮来调用 Python 方法。在里面,我检查了字段。如果它的值为A,我将他重定向到模型X,如果它的值为 B ,我将他重定向到模型Y。
编码
@api.multi
def my_button_method(self):
self.ensure_one()
if self.my_field == 'A':
action_id = self.env.ref(
'my_module.my_ir_actions_act_window_A')
return action_id.__dict__
elif self.my_field == 'B':
action_id = self.env.ref(
'my_module.my_ir_actions_act_window_B')
else:
action_id = False
if action_id:
return action_id.__dict__
Run Code Online (Sandbox Code Playgroud)
如果我在定义之后写这个action_id:
_logger.info(action_id.name)
_logger.info(action_id.type)
_logger.info(action_id.res_model)
_logger.info(action_id.view_type)
_logger.info(action_id.view_mode)
_logger.info(action_id.search_view_id)
_logger.info(action_id.help)
Run Code Online (Sandbox Code Playgroud)
我得到了正确的价值观。因此,在谷歌搜索之后,我看到它__dict__为您提供了一个字典,其键是对象的属性,其值是这些属性的值。
但是代码给出了一个错误,因为action_id.__dict__它没有返回一个包含动作及其值的预期属性的字典,而是以下内容:
{
'_prefetch': defaultdict(
<type 'set'>,
{
'ir.actions.act_window': set([449])
}
),
'env': <odoo.api.Environment object at 0x7f0aa7ed7cd0>,
'_ids': (449,) …Run Code Online (Sandbox Code Playgroud) 这是一个非常简单但难以回答的问题,因为我认为只有"少数"人才能解决这个问题.
我在Python中有这个简单的脚本:
import xmlrpclib
username = 'my_openerp_user'
pwd = 'my_password'
dbname = 'my_openerp_database'
sock = xmlrpclib.ServerProxy('http://localhost:8063/xmlrpc/common')
uid = sock.login(dbname, username, pwd)
sock = xmlrpclib.ServerProxy('http://localhost:8063/xmlrpc/object')
args = [('name', 'ilike', 'my_product')]
ids = sock.execute(dbname, uid, pwd, 'product.product', 'search', args)
print ids
Run Code Online (Sandbox Code Playgroud)
它应该在OpenERP数据库中找到名为"my_product"的所有产品,但事实并非如此.我知道为什么:
我不在一个谈论英语的国家,所以我在OpenERP中安装了一种语言,而xmlrpc的'搜索'正在寻找名为'my_product'的产品,但只有英文版.问题是显然没有一个字段来保存翻译的名称......它似乎也是"名字"!如果我用我的语言指定他们的名字,我找不到产品.
世界上任何人都有同样的问题吗?
编辑
好的,我有一个线索:如果不是'搜索',我会'读':
product_names = sock.execute(dbname, uid, pwd, 'product.product', 'read', ids, ['name'], {'lang': 'es_ES'})
Run Code Online (Sandbox Code Playgroud)
这样我可以指定语言,它的工作原理!但我不能用'搜索'做同样的事情,我得到错误.谁知道的方式???
新编辑
context = {'lang': 'es_ES'}
args = [('name', 'ilike', 'my_product')] # consulta
ids = sock.execute(dbname, uid, pwd, 'product.product', 'search', args, context)
Run Code Online (Sandbox Code Playgroud) 我想删除目录的空文件夹.
def remove_empty_dir(path):
try:
os.rmdir(path)
except OSError:
pass
def remove_empty_dirs(path):
for root, dirnames, filenames in os.walk(path):
for dirname in dirnames:
remove_empty_dir(os.path.realpath(os.path.join(root, dirname)))
remove_empty_dirs(path)
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
import shutil
shutil.rmtree(path)
Run Code Online (Sandbox Code Playgroud)
但这会删除所有内容,甚至包含内容的文件夹.问题是我需要从内到外进行,这样如果我有:
root_folder
child_folder1
grandchild_folder1.1 (empty)
child_folder2
granchild_folder2.1
granchild_folder2.2 (empty)
Run Code Online (Sandbox Code Playgroud)
该程序应删除grandchild_folder1.1,child_folder1和child_folder2.2,但不删除其余部分.
我正在尝试将模块从 Odoo 10 迁移到 12,但它向我显示此错误,我不明白为什么:
\n\n\n\n\n属性中使用的字段“状态”必须出现在视图中,但缺失
\n
你能帮我解决这个问题吗:
\n\nField \'state\' used in attributes must be present in view but is missing:\n - \'state\' in attrs="{\'invisible\': [\'|\',\'|\',(\'journal_entry_ids\', \'!=\', []), (\'state\', \'=\', \'confirm\'),(\'type\', \'!=\', \'bank\')]}"\n - \'state\' in attrs="{\'invisible\': [\'|\',\'|\',(\'journal_entry_ids\', \'=\', []), (\'state\', \'=\', \'confirm\'),(\'type\', \'!=\', \'bank\')]}"\n\nError context:\nView `account.bank.statement.form.reconciliation`\n[view_id: 1684, xml_id: n/a, model: account.bank.statement, parent_id: 462]\nNone while parsing /home/PycharmProjects/Odoo12/bank_reconciliation/views/account_view.xml:4, near\n<record id="view_bank_statement_form_reconciliation" model="ir.ui.view">\n <field name="name">account.bank.statement.form.reconciliation</field>\n <field name="model">account.bank.statement</field>\n <field name="inherit_id" ref="account.view_bank_statement_form"/>\n <field name="arch" type="xml">\n <data>\n <field name="date" position="after">\n <field name="type" …Run Code Online (Sandbox Code Playgroud) odoo ×8
python ×6
xml ×4
python-3.x ×3
odoo-10 ×2
odoo-8 ×2
directory ×1
dump ×1
odoo-11 ×1
odoo-12 ×1
odoo-13 ×1
pg-restore ×1
php ×1
postgresql ×1
python-2.7 ×1
ripcord ×1
virtualenv ×1
xml-rpc ×1
xmlrpclib ×1