Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 2, 2023 13:08:48

zippygrill
Зарегистрирован: 2023-01-02
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Сериализатор для POST запроса

Привет, в общем на Джанго проект, надо по АПИ передать POST запрос на добавлении нового рецепта. Да-да рецепта
В целом есть model.Recipe, с атрибутом ingredients

 ingredients = models.ManyToManyField(Ingredient,
                                         through='IngredientInRecipe')

Именно через through так как нужно доп поле “amount”
Релационная таблица model.IngredientInRecipe содержит 3 поля

 recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    ingredient = models.ForeignKey(Ingredient, on_delete=models.SET_NULL, null=True)
    amount = models.DecimalField(max_digits=6,
                                 decimal_places=1,
                                 validators=[MinValueValidator(1)]
                                 )

Теперь в своем сериализаторе RecipeSerializer есть
 ingredients = IngredientInRecipeSerializer(many=True)
Далее - уходим в другой сериализатор IngredientInRecipeSerializer и так указываю (или точнее хочу указывать) чтобы в моей релационной таблице искался или создавалась запись

 class IngredientInRecipeSerializer(serializers.ModelSerializer):
    """Serializer for ingredient in recipe objects"""
    
    ingredient = serializers.PrimaryKeyRelatedField(
        queryset=Ingredient.objects.all()
    )
    amount = serializers.DecimalField(max_digits=6,
                                      decimal_places=1)
    
    def create(self, validated_data):
        ingredient = validated_data.pop('ingredient')
        amount = validated_data.pop('amount')
        ingredient_in_recipe = IngredientInRecipe.objects.create(ingredient=ingredient,
                                          amount=amount)
        return ingredient_in_recipe

Теперь отправляю из PM запрос POST такого содержания
"ingredients": [
{
"id": 1,
"amount": 10
},
{
"id": 2,
"amount": 20
}
],

но в ответ получаю

{
"ingredients": [
{
"ingredient": [
"This field is required."
]
},
{
"ingredient": [
"This field is required."
]
}
]
}

Я так понимаю что-то не так с моим сериализатором атрибута ingredient в IngredientInRecipeSerializer..

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version