在ViewSet中使用不同的序列化器序列化ManyToManyFields

我有一个具有ManyToMany关系的模型,我称之为容器。在我的API中,我想获取与该容器中的特定ID匹配的条目。

例如,我想在beer_container中使用ID为“ 2”的容器。但是,当然只有TotalOrder中可用的容器。

我的模型如下:

class TotalOrder(models.Model):
    beer_container = models.ManyToManyField(BeerContainer,blank=True)
    foreign_beer_container = models.ManyToManyField(ForeignBeerContainer,blank=True)
    .....

我的序列化器:

class TotalOrderSerializer(serializers.ModelSerializer):
    beer_container = BeerContainerSerializer(many=True)
    soft_drink_container = SoftDrinkContainerSerializer(many=True)
    ....

    class Meta:
        model = TotalOrder
        fields = '__all__'

在views.py中,我有一个TotalOrderListCreate类,它返回带有容器的整个订单。而且效果很好。

class TotalOrderList(generics.ListAPIView):
    serializer_class = TotalOrderSerializer

    def get_queryset(self):
        table_number = 'table_number'
        try:
            table = Table.objects.filter(number=self.kwargs.get(table_number))
            queryset = TotalOrder.objects.filter(table__in=table)
        except (Table.DoesnotExist,TotalOrder.DoesnotExist):
            return []
        return queryset

但是现在,我想从那个TotalOrder中获得一个带有其ID的容器。 例如:api/total-order/1/beer_container/2

我已经尝试过这种方式,但是我不知道如何将我的查询集返回到TotalOrderSerializer中,因为例如,现在我有了BeerContainerSerializer的数据。 我已经尝试过了,但是没有运气。

class TotalOrderDetail(generics.ListAPIView):
    serializer_class = TotalOrderSerializer

    def get_queryset(self):
        table_number = self.kwargs.get('table_number')
        order_id = self.kwargs.get('order_id')
        container = self.kwargs.get('container')
        try:
            table = Table.objects.filter(number=table_number)
            total_order = TotalOrder.objects.get(table__in=table)
            if container == 'beer_container':
                queryset = total_order.beer_container.filter(id=order_id)

        except (TotalOrder.DoesnotExist,Table.DoesnotExist):
            return []
        return queryset

是否有一种方法可以返回一个容器的特定关系并用TotalOrderSerializer返回,还是必须为每个找到的容器编写自己的视图,并使用自己的序列化程序?

lihaizheng17 回答:在ViewSet中使用不同的序列化器序列化ManyToManyFields

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3088412.html

大家都在问