如何使用一个请求Django Rest框架创建多个资源?

2024-05-20 15:46:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个模型滑块,它与ImageSlider具有简单的一对多关系,多亏了ModelViewSet,我可以创建滑块,然后创建ImageSlider并将它们与滑块关联。但是我想希望能够上传一组图像,制作几个幻灯片图像,并将它们与同一个滑块关联,我的意思是我想两个选项都有,但我不确定如何做到这一点,以及如何用类似Postman的东西进行测试。我希望你们能帮助我理解这一点,因为我还在学习DRF

滑块视图

"""Slider view"""

# Django REST Framework
from rest_framework import viewsets


# Serializers
from api.sliders.serializers import SliderModelSerializer

# Models
from api.sliders.models import Slider


class SliderViewSet(viewsets.ModelViewSet):
   """Slider viewset"""

   queryset = Slider.objects.all()
   serializer_class = SliderModelSerializer

滑块图像视图

"""Slider Images view"""

# Django
from django.shortcuts import get_object_or_404

# Django REST Framework
from rest_framework import viewsets


# Serializers
from api.sliders.serializers import SliderImageModelSerializer

# Models
from api.sliders.models import SliderImage

class SliderImageViewSet(viewsets.ModelViewSet):
    """Slider Image viewset"""

    queryset = SliderImage.objects.all()
    serializer_class = SliderImageModelSerializer

滑块序列化程序

"""Slider Serializers"""

# Django Rest Framework
from rest_framework import serializers

# Serializers
from api.sliders.serializers import SliderImageModelSerializer

# Model
from api.sliders.models import Slider

class SliderModelSerializer(serializers.ModelSerializer):
   """ Slider Model Serializer. """
   images = SliderImageModelSerializer(many=True, read_only=True)

   class Meta:
       """Meta class"""
       model = Slider
       fields = (
           'id',
           'status',
           'images',
       )

滑块图像序列化程序

"""SliderImage Serializers"""

# Django Rest Framework
from rest_framework import serializers

# Model
from api.sliders.models import SliderImage

class SliderImageModelSerializer(serializers.ModelSerializer):
   """ Slider Image Model Serializer. """
   slider_id = serializers.IntegerField()

   class Meta:
       """ Meta class """
       model = SliderImage
       fields = (
           'id',
           'url',
           'link',
           'slider_id',
       )

我只关心上传文件和创建/存储资源,ImageSlider中的其他字段不是必需的


Tags: djangofrom图像importrestapiframeworkclass
1条回答
网友
1楼 · 发布于 2024-05-20 15:46:29

您可以使用actions创建另一个端点。 假设已经创建了一个SliderImage,它将类似于:

class SliderImageViewSet(viewsets.ModelViewSet):
    """Slider Image viewset"""

    queryset = SliderImage.objects.all()
    serializer_class = SliderImageModelSerializer

    @action(detail=True, methods=['post'])
    def images(self, request, pk=None):
        user = self.get_object()
        serializer = SliderImageSerializer(data=request.data)
        if serializer.is_valid():
            user.save()
            return Response({'status': 'images saved'})
        else:
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)

SliderImageSerializer是您的新序列化程序,并且您的端点与注册到SliderImageViewSet的端点相同,但在末尾是/<id>/images,其中id是先前创建的幻灯片图像的id

相关问题 更多 >