Единственное большое предостережение в вышеупомянутом подходе - это делегирование сохранения в метод post (), который в представлении по умолчанию выполняется в методе form_valid (), поэтому вам также необходимо переопределить form_valid (), в противном случае post (), например, один выше увидит, что вы сохраняете форму дважды. Что является пустой тратой времени на UpdateView, но довольно пагубным для CreateView.

тим, у меня естьBasket модель, и я хочу подтвердить, что не более5 Itemк нему можно добавить:

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')

Но при попытке сохранитьBasket a RuntimeError брошен, потому что максимальная глубина рекурсии превышена.

Ошибка заключается в следующем:

ValueError: "<Basket: Basket>" needs to have a value for field "basket" before this many-to-many relationship can be used.

Это происходит вif self.items.count() > 5: линия.

Очевидно, сложности Django просто не позволят вам проверить отношения m2m при сохранении модели. Как я могу проверить их тогда?

Ответы на вопрос(2)

Ваш ответ на вопрос