簡體   English   中英

如何划分Json字符串。?

[英]How to divide Json strings.?

我有 4 個模型CategoryVendorLocationProduct 供應商屬於類別模型(供應商是類別的外鍵)。 其余模型在Vendor ( Location , Product ) 下

ProductSerializerLocationSerializer嵌套到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM