У меня есть модельки Ingredient, Tag, Recipe, RecipeIngredient. Для этих моделей пишу API и как мне реализовать полный вывод связанных моделей при добавлении нового обьекта. К примеру, если делать запрос на вывод одного рецепта, ответ будет таким:
{
"id": 27,
"ingredients": [
{
"id": 8,
"ingredient": {
"id": 1,
"name": "Абрикосовое варенье",
"dimension": "г"
},
"quantity": "0.0"
}
],
"tags": [
{
"id": 1,
"name": "Ужин",
"color": "#8775D2FF",
"background": "#F4F2FBFF"
},
{
"id": 2,
"name": "Обед",
"color": "#49B64EFF",
"background": "#EDF8EEFF"
},
{
"id": 3,
"name": "Завтрак",
"color": "#E26C2DFF",
"background": "#FCF2ECFF"
}
],
"name": "Наименование",
"description": "Текстовое описание",
"cooking_time": 60,
"created_at": "2021-05-30T18:22:50.426105+03:00",
"author": 1
}
Когда я отправляю запрос на создание рецепта, ответ приходит таким:
{
"id": 36,
"ingredients": [
{
"id": 13,
"quantity": "0.0",
"ingredient": 1
}
],
"name": "Наименование",
"description": "Текстовое описание",
"cooking_time": 60,
"created_at": "2021-05-30T19:33:31.744076+03:00",
"author": 1,
"tags": [
1,
2,
3
]
}
И вот вопрос, как сделать так, чтобы после создания ответ был как при обычном запросе рецепта ? Чтобы tags показывал всю информацию, а первичные ключи и тд.
class RecipeIngredientListRetrieveSerializer(serializers.ModelSerializer):
ingredient = IngredientSerializer()
class Meta:
model = RecipeIngredient
exclude = ('recipe',)
class RecipeIngredientCreateSerializer(serializers.ModelSerializer):
class Meta:
model = RecipeIngredient
exclude = ('recipe',)
class RecipeListRetrieveSerializer(serializers.ModelSerializer):
ingredients = RecipeIngredientListRetrieveSerializer(
source='recipe_ingredients', many=True)
tags = TagSerializer(
many=True)
class Meta:
model = Recipe
fields = '__all__'
class RecipeCreateSerializer(serializers.ModelSerializer):
ingredients = RecipeIngredientCreateSerializer(
source='recipe_ingredients', many=True)
class Meta:
model = Recipe
fields = '__all__'
def create(self, validated_data):
ingredients = validated_data.pop('recipe_ingredients')
instance = super().create(validated_data)
ingredients = [
RecipeIngredient(
recipe=instance,
ingredient=ingredient['ingredient'],
quantity=ingredient['quantity']
) for ingredient in ingredients
]
instance.recipe_ingredients.add(*ingredients, bulk=False)
return instance