优惠有多种产品。当我尝试打印所选产品的详细信息时,它显示了一些错误
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'
您正在尝试将ManyToManyManager
而不是id
值传递给过滤器。您可以使用经理的all()
方法获得所有产品。
def get_products_list(self, instance):
products = instance.products.all() # <- this it the issue
return ProductSerializer(products, many=True).data