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 думает, что это отношения один к одному, а не один ко многим

Вернуться на верх