我有一个具有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
返回,还是必须为每个找到的容器编写自己的视图,并使用自己的序列化程序?