Django rest framework 序列化程序中未读取嵌套关系中的属性

Django rest framework 序列化程序中未读取嵌套关系中的属性,django-rest-framework,Django Rest Framework,我现在使用DRF作为我项目的后端 我有这样的产品型号 class product(models.Model): product_name = models.CharField(max_length=160) class category(models.Model): category_name = models.CharField(max_length=60) category_icon = models.ImageField(upload_to='categ

我现在使用DRF作为我项目的后端

我有这样的产品型号

class product(models.Model):
     product_name = models.CharField(max_length=160)
class category(models.Model):
      category_name = models.CharField(max_length=60)
      category_icon = models.ImageField(upload_to='category)
class ProductCategorySerializer(serializers.ModelSerializer):
     category_name = serializers.CharField(source='category.category_name')
     class Meta:
         model = product_category
         fields = ('product_id','category_id','category_name')

class ProductImageSerializer(serializers.ModelSerializer):
     class Meta:
         model = product_images
         fields = ('product_img',)

class ProductSerializer(serializers.ModelSerializer):
     category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections','category_collections')
class ProductSerializer(serializers.ModelSerializer):
     # category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections')
我有这样的分类模型

class product(models.Model):
     product_name = models.CharField(max_length=160)
class category(models.Model):
      category_name = models.CharField(max_length=60)
      category_icon = models.ImageField(upload_to='category)
class ProductCategorySerializer(serializers.ModelSerializer):
     category_name = serializers.CharField(source='category.category_name')
     class Meta:
         model = product_category
         fields = ('product_id','category_id','category_name')

class ProductImageSerializer(serializers.ModelSerializer):
     class Meta:
         model = product_images
         fields = ('product_img',)

class ProductSerializer(serializers.ModelSerializer):
     category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections','category_collections')
class ProductSerializer(serializers.ModelSerializer):
     # category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections')
因为一个产品可以有多个类别和我创建的很多图像

class product_category(models.Model):
      product = models.ForeignKey(product, on_delete=models.CASCADE, related_name='product_collections')
      category = models.ForeignKey(category, on_delete=models.CASCADE, related_name='category_collections')
最后一个模型呢

class product_image(models.Model):
      product = models.ForeignKey(product, on_delete=models.CASCADE,related_name='image_collections')
      product_img = models.ImageField(upload_to='product')
现在我有了这样的序列化程序

class product(models.Model):
     product_name = models.CharField(max_length=160)
class category(models.Model):
      category_name = models.CharField(max_length=60)
      category_icon = models.ImageField(upload_to='category)
class ProductCategorySerializer(serializers.ModelSerializer):
     category_name = serializers.CharField(source='category.category_name')
     class Meta:
         model = product_category
         fields = ('product_id','category_id','category_name')

class ProductImageSerializer(serializers.ModelSerializer):
     class Meta:
         model = product_images
         fields = ('product_img',)

class ProductSerializer(serializers.ModelSerializer):
     category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections','category_collections')
class ProductSerializer(serializers.ModelSerializer):
     # category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections')
从该序列化程序中,DRF将返回 这样的错误

class product(models.Model):
     product_name = models.CharField(max_length=160)
class category(models.Model):
      category_name = models.CharField(max_length=60)
      category_icon = models.ImageField(upload_to='category)
class ProductCategorySerializer(serializers.ModelSerializer):
     category_name = serializers.CharField(source='category.category_name')
     class Meta:
         model = product_category
         fields = ('product_id','category_id','category_name')

class ProductImageSerializer(serializers.ModelSerializer):
     class Meta:
         model = product_images
         fields = ('product_img',)

class ProductSerializer(serializers.ModelSerializer):
     category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections','category_collections')
class ProductSerializer(serializers.ModelSerializer):
     # category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections')
试图获取序列化程序
ProductSerializer
上的字段
category\u集合
的值时,获取了AttributeError。 序列化程序字段的名称可能不正确,并且与
产品
实例上的任何属性或键都不匹配

但是如果我像这样删除category\u collections字段

class product(models.Model):
     product_name = models.CharField(max_length=160)
class category(models.Model):
      category_name = models.CharField(max_length=60)
      category_icon = models.ImageField(upload_to='category)
class ProductCategorySerializer(serializers.ModelSerializer):
     category_name = serializers.CharField(source='category.category_name')
     class Meta:
         model = product_category
         fields = ('product_id','category_id','category_name')

class ProductImageSerializer(serializers.ModelSerializer):
     class Meta:
         model = product_images
         fields = ('product_img',)

class ProductSerializer(serializers.ModelSerializer):
     category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections','category_collections')
class ProductSerializer(serializers.ModelSerializer):
     # category_collections = CategoryProductSerializers(many=True)
     image_collections = ProductImageSerializer(many=True)
     class Meta:
          model = product
          fields = ('id','product_name','image_collections')

一切都很顺利,categories集合出了什么问题,难道我的眼睛没有看到错误吗?

您的代码中有输入错误。你的名字不一致。声明模型产品_映像,然后在ProductImageSerializer中使用模型产品_映像(复数),而不是声明的产品_映像。另外,您的序列化程序(您没有发布它的代码)被命名为CategoryProductSerializer(带s复数),而它可能只是CategoryProductSerializer(没有最后的s)。请编辑您的代码并发布丢失的序列化程序。您的代码中有拼写错误。你的名字不一致。声明模型产品_映像,然后在ProductImageSerializer中使用模型产品_映像(复数),而不是声明的产品_映像。另外,您的序列化程序(您没有发布它的代码)被命名为CategoryProductSerializer(带s复数),而它可能只是CategoryProductSerializer(没有最后的s)。请编辑您的代码并发布丢失的序列化程序。