Почему Djnago Rest Framework возвращяет старую информацию о связанных объектах при апдейте?

Проблема проявляется со связанными объектами

class Tag(models.Model):
    pass

class Photo(models.Model):
    tags = models.ManyToManyField(Tag, related_name='tags', blank=True)

class PhotoWriteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Photo

class PhotoViewSet(viewsets.ModelViewSet):
    queryset = Photo.objects.all()
    serializer_class = PhotoReadSerializer

    def get_serializer_class(self):
        if self.request.method in permissions.SAFE_METHODS:
            return PhotoReadSerializer
        return PhotoWriteSerializer


Создаю фотку.
Отправляю запрос на обновление тэгов
PATCH /photos/ {'id': 55, 'tags': [1,2,3]}

Тэги сохраняются нормально, но в ответе приходит старое значние, т.е. в данном случае пустое.
Если отправлю GET то вижу что тэги обновились, приходит 'tags': [1,2,3].
  • Вопрос задан
  • 255 просмотров
Решения вопроса 1
un1t
@un1t Автор вопроса
Вобшем я копал-копал эту багу, сделал отдельный проект - не воспроизводится.
Вобщем выяснился такой интересный момент
Такой код как выше работает, а не работает вот такой код

class PhotoViewSet(viewsets.ModelViewSet):
    queryset = Photo.objects.all().prefetch_related('tags')
    serializer_class = PhotoReadSerializer


Пока как временное решение вижу можно использовать такой вариант
class PhotoViewSet(viewsets.ModelViewSet):
    queryset = Photo.objects.all().prefetch_related('tags')
    serializer_class = PhotoWriteSerializer

    def get_queryset(self):
        if self.request.method in permissions.SAFE_METHODS:
            return self.queryset
        return Photo.objects.all()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы