как сериализовать пост API для сохранения вложенной модели? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть две модели:

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.FloatField()

    def __str__(self):
        return self.name


class ProductReview(models.Model):
    review = models.CharField(max_length=500)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)

    def __str__(self):
        return self.review

класс представления:

   class ProductReviewAPIView(APIView):
    def get(self, request):
        pass

    def post(self, request, *args, **kwargs):
        product = Product.objects.get(id=kwargs['product_id'])
        serializer = ProductReviewSerializer(product, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors)

Мои классы сериализатора:

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = "__all__"


class ProductReviewSerializer(serializers.ModelSerializer):
    product = ProductSerializer(required=False)

    class Meta:
        model = ProductReview
        fields = "__all__"

    def create(self,product, validated_data):
        product_review = ProductReview.objects.create(product=product, **validated_data)
        return product_review

Так что теперь я вызываю API as:

http://127.0.0.1:8000/product/review/1/

1 является идентификатором продукта. и этот продукт уже существует в базе данных. Теперь, когда я создаю обзор продукта, он должен создать обзор и просто поместить 1 в качестве внешнего ключа в столбец product_id.

Как мне это сделать?

...