Django 如何分割Json字符串。?
我有4种型号类别,供应商,位置,产品供应商属于类别模型(供应商是类别的外键)。其余型号在供应商(位置,产品) ProductSerializer和LocationSerializer嵌套到供应商序列化程序,而供应商序列化程序嵌套到类别序列化程序Django 如何分割Json字符串。?,django,django-rest-framework,serialization,Django,Django Rest Framework,Serialization,我有4种型号类别,供应商,位置,产品供应商属于类别模型(供应商是类别的外键)。其余型号在供应商(位置,产品) ProductSerializer和LocationSerializer嵌套到供应商序列化程序,而供应商序列化程序嵌套到类别序列化程序 class ProductSerializer(WritableNestedModelSerializer): class Meta: model = Product fields = ['id', 'item_n
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,
}
]
}
]
}
]
}
#预期产出
{
"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,
}
]
}
]
}
]
}
在我的输出中,列出了两种产品。可能不止两个。我只需要一个产品下的产品。所有产品必须按照我在预期输出中提到的相同结构进行打印。我该怎么做?可能吗?有人能帮我吗?您可以修改这行:
#旧版:
products=Category.objects.all()#确切地说,这些不是产品
#新的:
products=Product.objects.values_list('id',flat=True)#获取所有产品id
categories=Category.objects.filter(供应商\产品\中=产品)
并将类别
发送到类别序列化程序
,但这仍然不是您想要的,因为每个重复的类别都将包含所有产品的信息(而不仅仅是一个)。从这一点上我会去哪里?我会在
VendorSerializer
中创建方法get\u product
,并以某种方式保存信息类别
/供应商
,如果我们已经为此类别
添加了产品
,我会跳过下一步添加
还有,我还是不明白你为什么需要这种格式。格式有什么不同?好像same@amankumar:在我的输出中,列出了两种产品。它可能有两种以上。我只需要一个产品在产品部分。我需要打印所有具有相同结构的产品从数据库的角度来看,这没有任何意义,多个产品与这1个类别相关,将所有产品都列在同一个类别中是正确的,并且查询不应返回相同的多个值times@LinhNguyen:好的。有没有办法像我上面提到的那样划分这个结构?可以这样划分吗?VendorSerializer类中的product=ProductSerializer(many=True)声明。。。它真的是一对多的关系吗?根据UI,开发人员告诉我构建这样的结构。我不知道这是否真的可能。这就是我发布这个问题的原因。我可以为您提供UI设计,您可以为该UI建议更好的Jason格式吗?请这样做,也许会提出更好的JSON格式。如果这是一个类别中的4种产品,那么您提供的响应完全有效和正确。你不想发送这么多重复的信息。前端开发人员可以很容易地将此响应映射到模型中,并在其中迭代产品。顶部部分的名称和标题取决于UI。这来自类别模型。产品有产品形象、商品名称、店名、位置和价格。店名和位置来自供应商模型。项目名称和价格将来自产品型号。有很多供应商,每个供应商都有多个产品。您建议该UI使用哪种产品。输出或预期输出。?