我有膳食模型和成分,膳食与成分有很多关系。我尝试获得与Ingredientmodels.py匹配的对象
class Meal(models.Model): name = models.CharField(max_length=250) description = models.TextField(blank=True, null=True) recipe = models.TextField() is_published = models.BooleanField(default=False) user = ForeignKey(User, verbose_name='User', on_delete= models.CASCADE) difficulty = ForeignKey('Difficulty', on_delete=models.PROTECT, null=True) ingridients = models.ManyToManyField('Ingridient') ico = models.CharField(max_length=500, blank=True, null=True) class CategoryIngridients(models.Model): name = models.CharField(max_length=100, db_index=True) def __str__(self): return self.name class Ingridient(models.Model): name = models.CharField(max_length=100, db_index=True) category = ForeignKey('CategoryIngridients', on_delete=models.CASCADE, null=True) def __str__(self): return self.name
序列化程序.py
class MealSerializer(serializers.ModelSerializer): category = serializers.StringRelatedField() difficulty = serializers.StringRelatedField() #ingridients = serializers.StringRelatedField() user = serializers.StringRelatedField() class Meta: model = Meal fields = "__all__" class IngrigientSerializer(serializers.ModelSerializer): category = serializers.StringRelatedField() class Meta: model = Ingridient fields = "__all__"
视图.py
class TestCraft(APIView): def post(self, request): ingridients_tmp = request.data['ingredients'] ingrid = Ingridient.objects.filter(id__in=ingridients_tmp) print(ingrid) queryset = Meal.objects.filter(ingridients__in=ingrid) print(queryset) serializer = MealSerializer(queryset, many=True) return Response(serializer.data)
如果我POST json:
{"ingredients":[1,2]}
此视图返回,但它们正在重复:
[ { "id": 1, "difficulty": "Medium", "user": "vleo", "name": "gfgd", "description": "", "recipe": "...", "is_published": true, "ico": "", "ingridients": [ 1, 2, 3, 4, 5, 6 ] }, { "id": 5, "difficulty": "Easy", "user": "vleo", "name": "залупа", "description": "[eqyz", "recipe": "n.,sr", "is_published": false, "ico": "", "ingridients": [ 1, 2 ] }, { "id": 1, "difficulty": "Medium", "user": "vleo", "name": "gfgd", "description": "", "recipe": "...", "is_published": true, "ico": "", "ingridients": [ 1, 2, 3, 4, 5, 6 ] }, { "id": 5, "difficulty": "Easy", "user": "vleo", "name": "sdf", "description": "[eqyz", "recipe": "n.,sr", "is_published": false, "ico": "", "ingridients": [ 1, 2 ] } ]
您还可以建议:我如何创建类TestCraft(APIView),以便通过一条路径我可以使用json中的成分,也可以检索膳食(queryset)?