Как представить все поля ManyToMany в классе сериализатора djangorestgramework?

Я хочу вывести поля ManyToMany с их значениями, используя django.

Базовая модель

class SalesAction(models.Model):
    sales_representative = models.ForeignKey(
        SalesRepresentative, on_delete=models.CASCADE)
    doctor = models.ForeignKey(Doctor, on_delete=models.CASCADE)
    remark = models.CharField(max_length=500)
    date = models.DateField()
    medicines = models.ManyToManyField(Medicine, through='SalesActionMedicine')

    def __str__(self):
        return f'{self.sales_representative} - {self.doctor}'

Детали модели

class SalesActionMedicine(models.Model):
    sales_action = models.ForeignKey(SalesAction, on_delete=models.CASCADE)
    medicine = models.ForeignKey(Medicine, on_delete=models.CASCADE)
    quantity_type = models.CharField(max_length=50)
    quantity = models.PositiveIntegerField()

Я хочу представить все лекарства, связанные с каждым объектом в классе модели SalesAction

Это сериализатор, который я построил.

class SalesActionMedicineSerializer(serializers.ModelSerializer):
    class Meta:
        model = SalesActionMedicine
        fields = ('sales_action', 'medicine', 'quantity_type', 'quantity')

class SalesActionSerializer(serializers.ModelSerializer):
    medicines = SalesActionMedicineSerializer(many=True)

    class Meta:
        model = SalesAction
        fields = ('sales_representative', 'doctor', 'remark', 'date', 'medicines')

Этот код дает мне такую ошибку:

Got AttributeError when attempting to get a value for fieldsales_actionon serializerSalesActionMedicineSerializer. The serializer field might be named incorrectly and not match any attribute or key on the Medicineinstance. Original exception text was: 'Medicine' object has no attribute 'sales_action'.

Для получения лекарств нужно использовать MedicineSerializer вместо SalesActionMedicineSerializer.

Итак, код будет

class SalesActionSerializer(serializers.ModelSerializer):
    medicines = MedicineSerializer(many=True)

    class Meta:
        model = SalesAction
        fields = ('sales_representative', 'doctor', 'remark', 'date', 
                  'medicines')
Вернуться на верх