create () принимает ровно 2 аргумента (1 дано) - PullRequest
0 голосов
/ 19 мая 2018

Всякий раз, когда я создаю запись, я получаю сообщение об ошибке:

"create () принимает ровно 2 аргумента (1 дано)"

в данном коде:

@api.model
@api.constrains('xyz')
def create(self,values,**kwargs):
    res = super(Project, self).create(values)
         return res

Ответы [ 4 ]

0 голосов
/ 01 июня 2018

Вы не можете использовать ограничения и декораторы модели одновременно.

0 голосов
/ 22 мая 2018

Пожалуйста, попробуйте это код:

@api.model
@api.constrains('xyz')
def create(self, vals):
    project = super(Project, self).create(vals)
    return project
0 голосов
/ 22 мая 2018

Если вы хотите переопределить метод create, вы можете увидеть следующий пример:

class ClassName (models.Model): _inherit = "model.name" # Модель, наследуемая от

@api.model
def create(self, vals):
    record = super(ClassName, self).create(vals)
    # your code here        
    return record

Убедитесь, что вы используете имя класса в супер-методе.

Если вы хотите добавить ограничения на xyz, выполните следующие действия:

from openerp.exceptions import ValidationError

@api.constrains('xyz')
def _check_xyz(self):
    for record in self:
        # Check here the value of "record.xyz"
        # Then raise for example a validation error if it is evaluated to False
        # example: raise ValidationError("xyz must be ")

@ constrains поддерживает только простые имена полей, точечные имена (поля реляционных полей, например, partner_id.customer) не поддерживаются и будут игнорироваться
@constrains будет срабатывать только в том случае, если объявленные поля в оформленном методе включены в createили написать звонок.Это означает, что поля, отсутствующие в представлении, не будут вызывать вызов во время создания записи.Переопределение create необходимо для обеспечения того, чтобы ограничение всегда срабатывало (например, для проверки отсутствия значения).

0 голосов
/ 20 мая 2018

Попробуйте следующий код:

@api.model
@api.constrains('xyz')
def create(self,values):
     res = super(Project, self).create(values)
     return res

ПРИМЕЧАНИЕ. Вы пытаетесь передать один аргумент функции create, но на самом деле функция create принимает два аргумента согласно определению.

...