django - DRF 序列化 - 多对多字段通过
问题描述
如何使用 through 参数序列化多对多字段中的数据?我有 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"
}
]
}
我需要每种成分的量值。我该如何实施?
解决方案
您需要更改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
推荐阅读
- html - 引导表不分页
- linux - Bash 不捕获 ssh 错误
- matrix - 基于矩阵获取unicode块元素
- java - 如何为需要不同渲染参数的不同类型的电子邮件构建电子邮件请求类?
- java - 在运行时动态更新 Spring Security oAuth2 jwt.key-value
- python - 在 while 语句中暂停倒数计时器
- angular - 如何使用 rxjs 进行后续调用
- reactjs - React JS useState 用于非常快速的事件
- batch-file - 如果不存在导致批处理文件失败
- java - Spring MVC 4 静态资源未加载到 Thymeleaf