Перейти к содержимому
Меню
Чтобы взаимодействовать с сообществом, необходимо зарегистрироваться.
Этот вопрос был отмечен
2 Ответы
7064 Представления

I have boolean field and i want to make sql constraint that only 1 record in model could have this field checked. how can i do this?

class ProductPricelist(models.Model):
_inherit = 'product.pricelist'

priority = fields.Boolean('Priority')
Аватар
Отменить
Лучший ответ

Hi, 
Use api.constrains that will check your record before persisting it in the DB. Like this:

@api.constrains('priority')

 def _check_boolean(self):

    // to boost the performance, you search for only one record that is different from the current one which has the        //boolean checked. If found, then raise.

    checked_bool = self.search([('id', '!=', self.id),('priority', '=', True)], limit=1)  

    if self.priority and checked_bool:

        // Means that more than one record has the field checked.     

       raise ValidationError(_("There's already one checked boolean in record '%s'") % checked_bool.name)


Thanks.

Аватар
Отменить
Лучший ответ

Use the following code

@api.constrains('priority')

 def _check_priority(self):

    if self.priority:

        checked_bool = self.search([('id', '!=', self.id),('priority', '=', True)])  

        if checked_bool:

            raise ValidationError(_("There's already one priority is checked. Reference : %s") % checked_bool[0].name)

Аватар
Отменить
Related Posts Ответы Просмотры Активность
9
мар. 16
60932
1
мар. 15
4788
1
мар. 15
5533
2
мар. 15
4567
0
нояб. 24
7