如何使用ManyToMany字段进行过滤。?

问题描述 投票:0回答:1

优惠有多种产品。当我尝试打印所选产品的详细信息时,它显示了一些错误

型号

class Products(models.Model):
    name = models.CharField(max_length=30)
    price = models.CharField(max_length=30)


class Offer(models.Model):
    offer = models.IntegerField(default=0)
    products = models.ManyToManyField(Publication)

序列化器

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Products
        fields = ['name', 'price']

class OfferSerializer(serializers.ModelSerializer):
    products_list = serializers.SerializerMethodField()

    class Meta:
        model = Offer
        fields = ['id', 'offer', 'products_list']
        read_only_fields = ['id']

    def get_products_list(self, instance):
            products_id = instance.products
            products = Products.objects.filter(id=products_id)

            return ProductSerializer(products, many=True).data

错误

TypeError: int() argument must be a string, a bytes-like object or a number, not 'ManyRelatedManager'
django django-rest-framework serializer
1个回答
0
投票

您正在尝试将ManyToManyManager而不是id值传递给过滤器。您可以使用经理的all()方法获得所有产品。

def get_products_list(self, instance):
    products = instance.products.all()  # <- this it the issue
    return ProductSerializer(products, many=True).data
© www.soinside.com 2019 - 2024. All rights reserved.