Как я могу получить доступ к созданному экземпляру с помощью сериализатора в представлении?

У меня есть модельсериализатор, который создает новый экземпляр модели в случае пост-запросов к конечной точке.

Как я могу захватить только что созданный экземпляр в представлении для дальнейшей обработки? (Мне нужен идентификатор нового экземпляра для связанной модели).

# serializers.py

class OfferList(APIView):
    """
    List all Offers or create a new Offer related to the authenticated user
    """

    def get(self, request):
        offers = Offer.objects.filter(company__userprofile__user=request.user)
        serializer = OfferSerializer(offers, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = OfferSerializer(data=request.data)

        if serializer.is_valid():
            # Get the related company instance
            company = get_object_or_404(Company, userprofile__user=request.user)

            # Pass the related instance to the serializer instance to save the new Offer instance
            serializer.save(company=company)

            # Create Payment instances - returns a dict
            payments = create_payments(
                serializer.data.get('start_salary'),
                serializer.data.get('months'),
                serializer.data.get('start_date'),
                serializer.data.get('interest_type'),
                serializer.data.get('interest_interval'),
                serializer.data.get('interest_raise')
            )

            # Loop the dict and generate instances
            for key, value in payments.items():
                Payment.objects.create(
                    offer=  ,  # how to access the id of the created instance by the serializer above?
                    month=key,
                    amount=value
                )

            return Response(serializer.data,
                            status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# models.py

class Payment(models.Model):
    """
    A table to store all payments derived from an offer.
    """
    # Each monthly payment relates to an offer
    offer = models.ForeignKey(Offer, on_delete=models.CASCADE)
    month = models.DateField()
    amount = models.PositiveIntegerField()

Как говорится в документации django-rest-framework,

Если ваши экземпляры объектов соответствуют моделям Django, вы также захотите убедиться, что эти методы сохраняют объект в базе данных. Теперь при десериализации данных мы можем вызвать .save(), чтобы вернуть экземпляр объекта, основанный на проверенных данных.
Вызов .save() приведет либо к созданию нового экземпляра, либо к обновлению существующего, в зависимости от того, был ли передан существующий экземпляр при инстанцировании класса сериализатора.

Так что вы можете сделать следующее, чтобы захватить только что созданный экземпляр:

instance = serializer.save(company=company)
Вернуться на верх