'Meal' 对象不可迭代 django rest 框架

'Meal' object is not iterable django rest framework

我正在制作一个能够将产品添加到购物车的 api,当我收到一个空篮子时,一切正常,但一旦产品进入篮子,它就会给我错误 'Meal' object is not iterable

是models.py

class Meal(models.Model):
    """Meal"""

    title = models.CharField(max_length=255)
    description = models.TextField(default='The description will be later')
    price = models.DecimalField(max_digits=9, decimal_places=2)
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE, null=True)
    slug = models.SlugField()

class CartMeal(models.Model):
    """Cart Meal"""

    user = models.ForeignKey('Customer', on_delete=models.CASCADE)
    cart = models.ForeignKey('Cart', verbose_name='Cart', on_delete=models.CASCADE, related_name='related_meals')
    meal = models.ForeignKey(Meal, verbose_name='Meal', on_delete=models.CASCADE)
    qty = models.IntegerField(default=1)
    final_price = models.DecimalField(max_digits=9, decimal_places=2)

class Cart(models.Model):
    """Cart"""

    owner = models.ForeignKey('Customer', on_delete=models.CASCADE)
    meals = models.ManyToManyField(CartMeal, related_name='related_cart', blank=True)
    total_products = models.PositiveIntegerField(default=0)
    final_price = models.DecimalField(max_digits=9, decimal_places=2, default=0)
    in_orders = models.BooleanField(default=False)
    for_anonymous_user = models.BooleanField(default=False)

是serializers.py

class CartMealSerializer(serializers.ModelSerializer):

    meal = MealSerializer(many=True)

    class Meta:
        model = CartMeal
        fields = ['id', 'meal', 'qty', 'final_price']

class CustomerSerializer(serializers.ModelSerializer):

    user = serializers.SerializerMethodField()

    class Meta:
        model = Customer
        fields = '__all__'


class CartSerializer(serializers.ModelSerializer):

    meals = CartMealSerializer(many=True)
    owner = CustomerSerializer()

    class Meta:
        model = Cart
        fields = '__all__'

是views.py 这里我调用了get方法,之后报错

class CartViewSet(viewsets.ModelViewSet):

    serializer_class = CartSerializer
    queryset = Cart.objects.all()

    @staticmethod
    def get_cart(user):
        if user.is_authenticated:
            return Cart.objects.get(owner=user.customer, for_anonymous_user=False)
        return Cart.objects.get(for_anonymous_user=True)

    @staticmethod
    def _get_or_create_cart_meal(customer: Customer, cart: Cart, meal: Meal):
        cart_meal, created = CartMeal.objects.get_or_create(
            user=customer,
            meal=meal,
            cart=cart,
        )
        return cart_meal, created

    @action(methods=['GET'], detail=False)
    def current_customer_cart(self, *args, **kwargs):
        cart = self.get_cart(self.request.user)
        cart_serializer = CartSerializer(cart)
        return response.Response(cart_serializer.data)

请告诉我错误在哪里

一个CartMeal模型的meal是一个ForeignKey,也就是说它(最多)指的是一个Meal 对象,因此你不能在序列化器中使用 many=True:

class CartMealSerializer(serializers.ModelSerializer):
    meal = <strong>MealSerializer()</strong>  # ← no many=True

    class Meta:
        model = CartMeal
        fields = ['id', 'meal', 'qty', 'final_price']