Имея следующую модель:
class Book(models.Model):
name = models.CharField()
author = models.CharField()
date = models.DateField()
class Meta:
unique_together = ('name', 'author')
class BookSerializerWrite(serializers.ModelSerializer):
class Meta:
model = Book
class BookView(ApiView):
def put(self, request, *args, **kwargs):
serializer = BookSerializerWrite(data=request.data)
if serializer.is_valid():
serializer.save()
Представление выше не работает, так как serializer.is_valid() есть False.
Сообщение:
'The fields name, author must make a unique set'
Что является ограничением модели.
Как обновить модель?
Я бы предпочел не переопределять метод проверки сериализатора.
Я также не могу получить доступ к validated_data для обновления, как в
https://www.django-rest-framework.org/api-guide/serializers/#сохранение экземпляров
так как это пусто из-за того, что форма не проверяется. Есть ли встроенное решение?





Вы можете достичь этого, используя UpdateAPIview
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('name', 'author', 'date')
from rest_framework.generics import UpdateAPIview
from .serializers import BookSerializer
class BookUpdateView(UpdateAPIView):
serializer_class = BookSerializer
from django.urls import path
from . import views
url_patterns = [
path('api/book/<int:pk>/update/', views.BookUpdateView.as_view(), name = "book_update"),
]
Теперь разместите свои данные по указанному выше URL. Он должен работать.
Ссылка: https://github.com/encode/django-rest-framework/blob/master/rest_framework/generics.py