Django обновляет форму модели с полевыми ограничениями - PullRequest
0 голосов
/ 20 февраля 2019

Имея следующую модель:

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 /# save-instances

, так как он пустой из-за того, что форма не проверяется.Есть ли встроенное решение?

1 Ответ

0 голосов
/ 20 февраля 2019

Вы можете добиться этого, используя UpdateAPIview

serializers.py

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ('name', 'author', 'date')

views.py

from rest_framework.generics import UpdateAPIview
from .serializers import BookSerializer

class BookUpdateView(UpdateAPIView):
   serializer_class = BookSerializer

urls.py

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

...