Django Rest Framework :Как сериализовать поле многие ко многим
У меня есть сертификаты на мои модели и поставщики, и у поставщиков есть много-много отношений с сертификатами
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: Получена ошибка AttributeError при попытке получить значение для поля description на сериализаторе CertificatesSerializer.
Поле сериализатора может быть названо неверно и не совпадать с атрибутом или ключом экземпляра ManyRelatedManager.
Оригинальный текст исключения был следующим: у объекта 'ManyRelatedManager' нет атрибута 'description'.
Вы забыли установить many=True в certificates = CertificatesSerializer()
Правильная версия:
class SuppliersSerializer(serializers.ModelSerializer):
certificates = CertificatesSerializer(many=True)
class Meta:
model = Suppliers
fields = ('id', 'name', 'certificates')
Исключено, что DRF думает, что это отношения один к одному, а не один ко многим