У меня есть сериализатор BookSerializer
модели Book
с вложенной PageSerializer
модели Page
.Обновление экземпляра Book
включает удаление всех его экземпляров Page
с последующим созданием этих Page
экземпляров, возможно, с этим обновлением или без него, включающее какие-то новые данные страниц или ничего или существующее.
Но мойМодель Book
содержит ограничение, в котором каждый экземпляр Book
может иметь только максимум 100
страниц каждая.И проверка правильности выполняется в методе PageSerializer
validate
.У меня есть еще одна причина сделать это здесь:
def validate(self, attrs):
#some logic here
raise some error if book instance already has 100 pages or if it will have more than 100 pages when combined with new pages when added.
Определение метода обновления сериализатора или, скажем, BookSerializer
:
def update(self, instance, validated_data):
...
...
Итак, данные, отправляемые на обновление,уже проверяется и может быть доступен как validated_data
в методе update
.
Теперь вот проблема.Вложенный сериализатор PageSerializer
имеет метод validate
, который проверяет, сколько страниц этого экземпляра Book
уже существует, и проверяет их.
Пусть B
будет экземпляром Book
, уже имеющим 100
страниц.Если я попытаюсь обновить B
без каких-либо изменений, отправленные данные по-прежнему проверяются для проверки в BookSerializer
, передавая данные своих страниц в PageSerializer
и, наконец, передавая метод validated_data
в update(self, instance, val;idated_data)
.
Мои вопросы:
- Как удалить все страницы
B
перед проверкой данных страниц, отправленных для обновления B
? - Или Как обойти проверкувложенного сериализатора?Проверяйте только сериализатор и позаботьтесь о проверке вложенного сериализатора в методе обновления родительского сериализатора перед сохранением.