#django #django-rest-framework
Вопрос:
У меня есть ModelViewSet с перезаписанным методом create (), так как я могу создавать несколько экземпляров одновременно. Мне было интересно, можно ли выполнить get_or_create вместо .perform_create (), как показано ниже?
По сути, если я сделаю один и тот же вызов дважды, я хотел бы, чтобы только первый вызов создавал экземпляр/ы.
class CreateTokenView(viewsets.ModelViewSet):
queryset = BayAccessToken.objects.all()
serializer_class = accessTokenSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data, many=True)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
Или лучше всего просто выполнить цикл и выполнить собственное get_or_create для данных?
Ответ №1:
Вы должны переопределить метод create в сериализаторе, что-то вроде этого:
class accessTokenSerializer(serializer.X):
def create(self, validated_data):
return YourModel.objects.get_or_create(name=validated_data.pop("name"), defaults=validated_data)[0]