![](/img/trans.png)
[英]celery tasks converts python list into strings. how to avoid this?
[英]How to divide Json strings.?
我有 4 個模型Category , Vendor , Location , Product 。 供應商屬於類別模型(供應商是類別的外鍵)。 其余模型在Vendor ( Location , Product ) 下
ProductSerializer和LocationSerializer嵌套到VendorSerializer ,而VendorSerializer嵌套到CategorySerializer 。
class ProductSerializer(WritableNestedModelSerializer):
class Meta:
model = Product
fields = ['id', 'item_name', 'price']
read_only_fields = ['id']
class LocationSerializer(WritableNestedModelSerializer):
class Meta:
model = Location
fields = ['place']
class VendorSerializer(WritableNestedModelSerializer):
vendor_location = LocationSerializer()
product = ProductSerializer(many=True)
class Meta:
model = Vendor
fields = ['vendor_name','vendor_location','product']
read_only_fields = ['id']
class CategorySerializer(WritableNestedModelSerializer):
vendor = VendorSerializer(many=True)
class Meta:
model = Category
fields = ['id', 'category_name', 'tittle', 'vendor']
read_only_fields = ['id']
# 看法
class ProductView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request, format=None, *args, **kwargs):
products = Category.objects.all()
serializer = CategorySerializer(products, many=True, context={'request': request})
return Response({'response': 'ok', 'result': serializer.data})
# 輸出
{
"response": "ok",
"result": [
{
"id": 1,
"category_name": "Cake",
"tittle": "test title",
"vendor": [
{
"vendor_name": "Test_Name",
"vendor_location": {
"place": "Test_Place"
},
"product": [
{
"id": 1,
"item_name": "test_1",
"price": 3200,
},
{
"id": 2,
"item_name": "test_2",
"price": 2010,
}
]
}
]
}
]
}
# 預期輸出
{
"response": "ok",
"result": [
{
"id": 1,
"category_name": "Cake",
"tittle": "test title",
"vendor": [
{
"vendor_name": "Test_Name",
"vendor_location": {
"place": "Test_Place"
},
"product": [
{
"id": 1,
"item_name": "test_1",
"price": 3200,
}
]
}
]
},
{
"id": 1,
"category_name": "Cake",
"tittle": "test title",
"vendor": [
{
"vendor_name": "Test_Name",
"vendor_location": {
"place": "Test_Place"
},
"product": [
{
"id": 2,
"item_name": "test_2",
"price": 2010,
}
]
}
]
}
]
}
在我的輸出中,列出了兩種產品。 可能有兩個以上。 我只需要一個產品下的產品。 所有產品都必須以我在預期輸出中提到的相同結構打印。 我該怎么做呢? 是否可以? 有人可以幫我做到這一點嗎?
您可以修改此行:
# old:
products = Category.objects.all() # definately these are not products
# new:
products = Product.objects.values_list('id', flat=True) # get all products ids
categories = Category.objects.filter(vendor__product__in=products)
並將categories
發送到CategorySerializer
,認為這仍然不是您想要的,因為每個重復的類別都將保存有關所有產品的信息(不僅僅是一個)。
從這一點我會去哪里? 我會在VendorSerializer
創建方法get_product
並以某種方式保存我們現在所在的Category
/ Vendor
信息,如果我們已經為此Category
添加了一個Product
- 我將跳過添加下一步。
附注。 我仍然不明白為什么你需要這種格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.