Python 3.x 从Django创建RESTAPI
我创建了模型来保存产品、类别和ProductCategoryPython 3.x 从Django创建RESTAPI,python-3.x,django,restapi,Python 3.x,Django,Restapi,我创建了模型来保存产品、类别和ProductCategory class Product(models.Model): ... title = models.CharField(max_length=100, default = '') ... class Category(models.Model): name = models.CharField(max_length = 20, defau
class Product(models.Model):
...
title = models.CharField(max_length=100, default = '')
...
class Category(models.Model):
name = models.CharField(max_length = 20, default = '')
class ProductCategory(models.Model):
product = models.ForeignKey(Product, default=None, on_delete=models.CASCADE)
category = models.ForeignKey(Category, default=None, on_delete=models.CASCADE)
模型的序列化程序:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = '__all__'
class ProductCategorySerializer(serializers.ModelSerializer):
class Meta:
model = ProductCategory
fields = '__all__'
视图集
class ProductViewset(viewsets.ModelViewSet):
queryset = models.Product.objects.all()
serializer_class = serializers.ProductSerializer
class CategoryViewset(viewsets.ModelViewSet):
queryset = models.Category.objects.all()
serializer_class = serializers.CategorySerializer
class ProductCategoryViewset(viewsets.ModelViewSet):
queryset = models.ProductCategory.objects.all()
serializer_class = serializers.ProductCategorySerializer
到目前为止,我可以向每个表添加数据,并从Django REST框架查看它们
Json响应:
产品:
[
...
{
"id": 1,
"title": "Jacket One",
}
...
]
类别
[
...
{
"id": 1,
"name": "Jacket",
}
...
]
产品类别
[
...
{
"id": 1,
"product": 1,
"category": 1
}
...
]
我想要创建的实际json是:
[
"jacket":[
{
"id": 1,
"title": "Jacket One",
}
......other jacket products......
],
........ other categories with their products ............
]
我如何实现这样的json。我尝试加入模型并在queryset中进行过滤,但没有找到答案。如能在正确的方向上给予帮助,我们将不胜感激。谢谢。在序列化程序中使用
rest\u框架
。我使用了序列化程序。我要问的是如何使用透视表连接两个模型,然后在其上创建json响应。感谢您的回复。请在序列化程序中使用rest\u framework
。我使用了序列化程序。我要问的是如何使用透视表连接两个模型,然后在其上创建json响应。谢谢你的回复。