Как представить все поля 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 field
sales_actionon serializer
SalesActionMedicineSerializer. 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')