在 datepicker odoo 10 中禁用以前的日期

Disable previous dates in datepicker odoo 10

我试图在支付发票时禁用之前的日期,但这对我不起作用。

这是我的模型:

from odoo import models, fields, api
from datetime import datetime
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT


class account_payment(models.Model):
    _inherit = 'account.payment'

    def onchange_date(self, cr, uid, ids, payment_date, context=None):
        if datetime.strptime(payment_date, DEFAULT_SERVER_DATE_FORMAT).date() > datetime.now().date():
            return False
        return payment_date

这是我的 xml 文件:

<odoo>
  <data>

        <record model="ir.ui.view" id="view_account_payment_invoice_form">

            <field name="name">account.payment.invoice.form</field>

            <field name="model">account.payment</field>

            <field name="inherit_id" ref="account.view_account_payment_invoice_form"/>

            <field name="arch" type="xml">

                <xpath expr="//field[@name='payment_date']" position="replace">

                    <field name="payment_date" on_change="onchange_date(payment_date)"/>

                </xpath>

            </field>

        </record>


  </data>
</odoo>

错误:

TypeError: onchange_date() 需要至少 5 个参数(给定 2 个)

请有人帮助我。谢谢!

我认为这可能有用, 您的型号:

@api.onchange('payment_date')
def onchange_date(self):
    if datetime.strptime(self.payment_date, DEFAULT_SERVER_DATE_FORMAT).date() > datetime.now().date():
        self.payment_date = ''

您的看法:

<odoo>
  <data>
        <record model="ir.ui.view" id="view_account_payment_invoice_form">
            <field name="name">account.payment.invoice.form</field>
            <field name="model">account.payment</field>
            <field name="inherit_id" ref="account.view_account_payment_invoice_form"/>
            <field name="arch" type="xml">
                <xpath expr="//field[@name='payment_date']" position="replace">
                    <field name="payment_date"/>
                </xpath>
            </field>
        </record>
  </data>
</odoo>

您收到错误的原因是您将新旧混合使用 API。如果您想使用旧样式 API(cr, uid, ids, ... 和 XML on_change=...),那么您必须在新的 API 方法(您的 python 是新的 API 因为你的 class 继承了 models.Model).

models/account_payment.py

# This decorator provides cr, uid, ids, and context variables
# to your method by default (like the old API had)
@api.cr_uid_ids_context
def onchange_date(self, cr, uid, ids, payment_date, context=None):
    ...

您可以在 this blog post

上阅读更多关于这些特殊装饰器(在 9.0 版中引入)的信息