我有我的模型证书和供应商,供应商与证书有多对多的关系
class Certificates(models.Model):
name = models.CharField(max_length=500, null=False)
description = models.CharField(max_length=500, null=False)
image_url = models.CharField(max_length=500, null=False)
def __str__(self):
return f'{self.name}'
class Suppliers(models.Model):
name = models.CharField(max_length=500, null=False)
location = models.CharField(max_length=500, null=False)
longitude = models.CharField(max_length=500, null=True)
latitude = models.CharField(max_length=500, null=True)
certificates = models.ManyToManyField(Certificates, null=True)
bio = RichTextField(blank=True, null=True)
environmental_info = RichTextField(blank=True, null=True)
social_info = RichTextField(blank=True, null=True)
governance_info = RichTextField(blank=True, null=True)
def __str__(self):
return f'{self.name}'
这是我的序列化器:
class CertificatesSerializer(serializers.ModelSerializer):
class Meta:
model = Certificates
fields = '__all__'
class SuppliersSerializer(serializers.ModelSerializer):
certificates = CertificatesSerializer()
class Meta:
model = Suppliers
fields = ('id', 'name', 'certificates')
这是我的观点
@api_view(['GET'])
def supplier_response_list(request):
suppliers_list = Suppliers.objects.all()
serializer = SuppliersSerializer(suppliers_list, many=True)
return Response(serializer.data)
收到此错误: AttributeError:尝试在序列化器
description
上获取字段 CertificatesSerializer
的值时出现 AttributeError。
序列化器字段可能命名不正确,并且与 ManyRelatedManager
实例上的任何属性或键不匹配。
原始异常文本是:“ManyRelatedManager”对象没有属性“description”。
您忘记在
many=True
中设置
certificates = CertificatesSerializer()
正确版本:
class SuppliersSerializer(serializers.ModelSerializer):
certificates = CertificatesSerializer(many=True)
class Meta:
model = Suppliers
fields = ('id', 'name', 'certificates')
如果没有 DRF 认为这是一对一关系而不是一对多
像@sharpek评论一样在
many=True
中设置certificates = CertificatesSerializer()
请注意,在迁移和存储数据时,
null=True
中的ManyToManyField
会被忽略
在这种情况下应该使用
blank=True
来表示 m2m
关系,而不是可空数据插入