Я делаю API для заказа, который может иметь несколько продуктов. Я могу создать его успешно, но когда я пытаюсь обновить его с помощью идентификатора еды, я получаю сообщение об ошибке, например, объект NoneType не имеет атрибута 'get'.
Вот мой код:
models .py
class Order(models.Model):
order_no = models.PositiveIntegerField(blank=True,null=True)
class VegFood(models.Model):
name = models.CharField(max_length=25,blank=True,null=True)
price = models.CharField(max_length=25,blank=True,null=True)
order = models.ForeignKey(Order,on_delete=models.CASCADE,blank=True,null=True,related_name="order")
serializers.py
class VegFoodSerializer(serializers.ModelSerializer):
class Meta:
model = VegFood
fields = ['name','price']
class OrderSerializer(serializers.ModelSerializer):
"""
for multiple add items importinf serializers in Order
"""
veg_foods = VegFoodSerializer(many=True,required=False)
nonveg_foods = NonVegFoodSerializer(many=True,required=False)
starters = StarterSerializer(many=True,required=False)
deserts = DesertSerializer(many=True,required=False)
class Meta:
model = Order
fields = ['order_no','veg_foods','nonveg_foods','starters','deserts']
def create(self, validated_data):
veg_food_validated_data = validated_data.pop('veg_foods',None)
if veg_food_validated_data:
for veg_food in veg_food_validated_data:
veg_food_obj = VegFood.objects.create(order=orders,**veg_food)
return orders
def update(self, instance, validated_data):
instance.order_no = validated_data.pop('order_no', instance.order_no)
veg_food_validated_data = validated_data.pop('veg_foods',None)
if veg_food_validated_data:
for veg_food in veg_food_validated_data:
veg_food_id = veg_food.get('veg_food_id')
print(veg_food_id)
veg_foods, created = VegFood.objects.get_or_create(order_id=instance.id,id=veg_food_id)
veg_foods.name = veg_food_id.get('name',None)
veg_foods.price = veg_food_id.get('price',None)
veg_foods.save()
instance.save()
return instance
My JSON Тело:
{
"order_no":1,
"veg_foods":[
{
"veg_food_id":1,
"name":curry1,
"price":150
},
{
"veg_food_id":2,
"name":curry2,
"price":120
},
{
"name":curry2,
"price":120
}
]
}
Итак, object1 & object2 Я передаю идентификатор поэтому он обновит 1-й и 2-й объект. У объекта 3 нет идентификатора, поэтому он создаст третий объект. Но я получаю сообщение об ошибке примерно так:
У объекта NoneType нет атрибута 'get'.
Какую ошибку я делаю?