я в настоящее время имеют следующие Viewset:Django REST Framework perform_create: Вы не можете назвать `.save()` после получения доступа к `serializer.data`
class ArtistProfileViewSet(viewsets.ModelViewSet):
queryset = ArtistProfile.objects.all()
serializer_class = ArtistProfileSerializer
def perform_create(self, serializer):
if serializer.is_valid():
serializer.save()
Со следующими сериализаторов:
class SimpleArtistTrackSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ArtistTrack
fields = (...my fields...)
class ArtistProfileSerializer(serializers.HyperlinkedModelSerializer):
owners = UserSerializer(many=True, required=False)
tracks = SimpleArtistTrackSerializer(many=True, required=False)
class Meta:
model = ArtistProfile
fields = (...my fields...)
Я получаю следующую ошибку:
AssertionError: You cannot call `.save()` after accessing `serializer.data`.If you need to access data before committing to the database then inspect 'serializer.validated_data' instead.
Я не вижу, где бы я редактировал объект serializer.data. Есть ли что-то, что мне не хватает, что приведет к этому редактированию? Как я могу устранить эту ошибку?
Мне редко нужно было переопределить метод в представлении, и когда мне это нужно, он часто заканчивался хаками и копировал пасты из исходного переопределенного кода. Как правило, лучше использовать материал в сериализаторе, когда это возможно. Невозможно ли вы поместить свой материал в метод 'create()' сериализатора? – pasztorpisti
Я согласен с тем, что я должен пересмотреть, как я это делаю. Тем не менее, я все еще чувствую, что это может быть признаком проблемы. Я взял этот код прямо из документации DRF. –