我有膳食模型和成分,膳食与成分有很多关系。我尝试获得与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)?