【发布时间】:2020-09-04 00:04:05
【问题描述】:
我正在开发一个带有其余框架的 Django API,我想获取与父级相关的所有子类的数据以及父级数据。
我现在可以做到这一点的唯一方法是使用序列化程序中的< depth = 1 > 参数。但问题是,我得到每个孩子的父数据,我只想要一次。
我有两个嵌套模型,比如说:
class Shop(models.Model):
name = models.Charfield(max_length=50)
address = models.Charfield(max_length=200)
def __str__(self):
return self.name
class Product(models.Model)
shop = models.ForeignKey('Shop', on_delete=models.CASCADE , related_name='product')
name = models.Charfield(max_length=50)
price = models.IntegerField(default=0)
序列化器如下所示:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = [
'shop',
'pk',
'name',
'price',
]
class ShopProductSerializer(serializers.ModelSerializer):
product_set = ProductSerializer(many=True)
class Meta:
model = Shop
fields = [
'shop',
'pk',
'name',
'price',
'product_set',
]
因此,如果我将 depth=1 添加到 ProductSerializer,我会得到重复的 Shop Data。 我已经看到通过创建像第二个这样的嵌套序列化程序来解决这个问题。
但是我该如何添加我的 API 视图来使用它呢?
现在看起来像这样:
class ProductListView(generics.ListAPIView):
serializer_class = ProductSerializer
def get_queryset(self):
shop = self.kwargs['pk']
products = Product.objects.filter(shop=shop)
return products
我理想的 JSON 应该是这样的:
{
'shop':{
'name' = 'abc',
'address' = 'abc 123'
},
'products':{
{
...product 1 data
},
{
...product 2 data
}
}
}
【问题讨论】:
-
不应该在
product中使用shop字段吗?