我想限制用户从 odoo-8 的日期选择器中选择之前的日期。请告诉我如何在 odoo datepicker 中禁用以前的日期
有一个模块https://apps.openerp.com/apps/modules/8.0/web_widget_datepicker_options/
如果您有一个名为 current_date 的日期字段
<field name="current_date" />
安装模块后,只需添加 jquery datepicker 的选项
minDate
并将其设置为 0 像这样
<field name="current_date" options="{'datepicker':{'minDate': 0}}"/>
我之前这样做过 在字段上设置一个onchange,每次字段更改时都会触发该字段,并且在onchange中您可以将日期转换为python日期(使用odoo的默认时间格式)并将其与当前日期进行比较
from datetime import datetime
from openerp import api
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
from openerp.exceptions import Warning
@api.onchange('current_date')
def onchange_date(self):
if datetime.strptime(self.current_date, DEFAULT_SERVER_DATE_FORMAT).date() < datetime.now().date():
raise warning('Please select a date equal/or greater than the current date')
return False
return my_date
对于任何正在寻找适用于 Odoo 17 的解决方案的人。
首先,在
datetime_field.js
目录中的某个位置创建一个 static/
模块,并确保将其添加到 web.assets_backend
的 __manifest__.py
部分,例如:
{
...,
"assets": {
"web.assets_backend": [
"<module_name>/static/src/views/**/*",
]
},
然后定义
DateTimeField
扩展:
/** @odoo-module **/
import {
DateTimeField,
dateTimeField,
} from "@web/views/fields/datetime/datetime_field";
import { registry } from "@web/core/registry";
export class CustomDateTimeField extends DateTimeField {
static defaultProps = {
...DateTimeField.defaultProps,
minDate: "today",
};
}
export const customDateTimeField = {
...dateTimeField,
component: CustomDateTimeField,
};
registry.category("fields").add("custom_datetime", customDateTimeField);
在 XML 中使用此自定义小部件,如下所示:
<field name="some_datetime_field" widget="custom_datetime" />