如何通过参数从多对多字段序列化数据? 我有 3 个模型:
class Ingredient(models.Model):
name = models.CharField(
max_length=200,
)
measurement_unit = models.CharField(
max_length=200,
)
class Recipe(models.Model):
name = models.CharField(
max_length=200,
)
ingredients = models.ManyToManyField(
Ingredient,
through='RecipeIngredientsDetails',
)
class RecipeIngredientsDetails(models.Model):
recipe = models.ForeignKey(
Recipe,
on_delete=models.CASCADE,
)
ingredient = models.ForeignKey(
Ingredient,
on_delete=models.CASCADE,
)
amount = models.FloatField()
我的序列化程序:
class IngredientSerializer(ModelSerializer):
# amount = ???
class Meta:
model = Ingredient
fields = ["id", "name", "amount", "measurement_unit"]
class RecipeSerializer(ModelSerializer):
class Meta:
model = Recipe
fields = ["name", "ingredients"]
depth = 1
现在,我明白了:
{
"name": "Nice title",
"ingredients": [
{
"id": 1,
"name": "salt",
"measurement_unit": "g"
},
{
"id": 2,
"name": "sugar",
"measurement_unit": "g"
}
]
}
我需要每种成分的量值。我该如何实施?
答案 0 :(得分:0)
您需要更改 IngredientSerializer
以使用 RecipeIngredientsDetails
模型,并在 RecipeSerializer
中显式设置相关序列化程序:
from rest_framework.serializers import ReadOnlyField
class IngredientDetailSerializer(ModelSerializer):
id = ReadOnlyField(source='ingredient.id')
ingredient = ReadOnlyField(source='ingredient.name')
measurement_unit = ReadOnlyField(source='ingredient.measurement_unit')
class Meta:
model = RecipeIngredientsDetails
fields = ["id", "ingredient", "measurement_unit", "amount",]
class RecipeSerializer(ModelSerializer):
ingredients = IngredientDetailSerializer(source="recipeingredientsdetails_set", many=True)
class Meta:
model = Recipe
fields = ["name", "ingredients"]
depth = 1