Django: como validar relacionamentos m2m?
Digamos que eu tenho umBasket
modelo e quero validar que não mais do que5
Item
s podem ser adicionados a ele:
class Basket(models.Model):
items = models.ManyToManyField('Item')
def save(self, *args, **kwargs):
self.full_clean()
super(Basket, self).save(*args, **kwargs)
def clean(self):
super(Basket, self).clean()
if self.items.count() > 5:
raise ValidationError('This basket can\'t have so many items')
Mas ao tentar salvar umBasket
a RuntimeError
é lançado porque a profundidade máxima da recursão foi excedida.
O erro é o seguinte:
ValueError: "<Basket: Basket>" needs to have a value for field "basket" before this many-to-many relationship can be used.
Isso acontece noif self.items.count() > 5:
linha.
Aparentemente, as complexidades do Django simplesmente não permitem que você valide relacionamentos m2m ao salvar um modelo. Como posso validá-los então?