Python 如何在odoo日期选择器中禁用当前日期后的天数?

Python 如何在odoo日期选择器中禁用当前日期后的天数?,python,odoo,Python,Odoo,我有一个带有日期字段的视图。用户不得选择今天之后的日期。如何在Odoo日期选择器中禁用当前日期后的所有天数?日期选择器maxDate用于设置最大可选择日期,该日期将禁用当前日期后的天数 我没有找到从XML动态传递当前日期的方法,因此我重写了fields\u view\u get以更改options属性,并将maxDate设置为当前日期 以下示例将maxDate选项设置为发票日期: class AccountInvoice(models.Model): _inherit = 'accoun

我有一个带有日期字段的视图。用户不得选择今天之后的日期。如何在Odoo日期选择器中禁用当前日期后的所有天数?

日期选择器
maxDate
用于设置最大可选择日期,该日期将禁用当前日期后的天数

我没有找到从XML动态传递当前日期的方法,因此我重写了
fields\u view\u get
以更改
options
属性,并将
maxDate
设置为当前日期

以下示例将maxDate选项设置为发票日期:

class AccountInvoice(models.Model):
    _inherit = 'account.invoice'

    @api.model
    def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
        res = super(AccountInvoice, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
        if view_type == 'form':
            doc = etree.XML(res['arch'])
            for node in doc.xpath("//field[@name='date_invoice']"):
                node.set('options', "{'datepicker': {'maxDate': '%sT23:59:59'}}" % fields.Date.today().strftime(DEFAULT_SERVER_DATE_FORMAT))
            res['arch'] = etree.tostring(doc)
        return res
编辑:

您可以在XPATH表达式中使用
来指定第二个字段名

doc.xpath("//field[@name='date_invoice' or @name='date_due']")
编辑:

尝试在
23:59:59

node.set('options', "{'datepicker': {'maxDate': '%sT23:59:59'}}" % fields.Date.today().strftime(DEFAULT_SERVER_DATE_FORMAT))

[我想这篇文章会对你有所帮助。如果需要在同一个视图上对两个日期字段做同样的操作呢?我是否应该在doc.xpath(“//field[@name='other_date']”)中为node.set('options',“{'datepicker':{'maxDate':'%s'}}}”%fields.date today().strftime(默认的服务器日期格式))res['arch']=etree.tostring(doc)当我第一次打开表单并尝试选择当前日期时,我发现了一个bug。我不能这样做,尽管这一天已启用。我必须选择其他日期,然后选择当前日期,您是否收到相同的错误?我认为它选择了当前日期的午夜,这意味着您无法选择当前日期的时间,这就是为什么它被排除在外。当我添加{maxDate':'%sT23:59:59'}我可以第一次选择当前日期,但在选择当前日期后,我还可以选择后天(我不希望这样)这就是行为:当我打开datepicker时,后天被禁用,但当我选择其他日期时,“后天”突然被启用。我选中了该选项,它按预期工作。我无法重现您的问题,似乎有另一个代码更改了
maxDate
选项。