Как мне сериализовать поле ManyToMany и вернуть количество объектов на основе этого поля? В моем примере ниже я сериализую объект Admission и могу получить весь диагноз, связанный с объектом. Но я застрял на том, как подсчитать количество поступающих предметов на основе значения в диагнозе.
[
{
"doctor_id": 7,
"diagnosis": [
"Acute encephalopathy",
"Brachial neuritis"
]
},
{
"doctor_id": 7,
"diagnosis": [
"Acute febrile illness"
]
}
]
Как мне изменить это, чтобы получить количество объектов на основе поля диагноз ?
Я хочу получить результат API, подобный следующему:
[
{
"Acute febrile illness": 1
},
{
"Acute encephalopathy + Brachial neuritis": 1
}
]
models.py
class Admission(models.Model):
...
diagnosis = models.ManyToManyField(Diagnosis)
doctor = models.ForeignKey(Doctor, on_delete=models.CASCADE,
related_name='admissions',
limit_choices_to={'is_admitting': True})
...
class Diagnosis(models.Model):
...
name = models.CharField(max_length=100)
...
serializers.py
class DiagnosisSerializer(serializers.ModelSerializer):
class Meta:
model = Diagnosis
fields = ('name',)
def to_representation(self, value):
return value.name
class AdmissionSerializer(serializers.ModelSerializer):
diagnosis = DiagnosisSerializer(read_only=True, many=True)
class Meta:
model = Admission
fields = ('doctor_id', 'diagnosis' )
views.py
class AdmissionViewSet(viewsets.ModelViewSet):
queryset = Admission.objects.all()
serializer_class = AdmissionSerializer
filter_backends = (filters.DjangoFilterBackend, )
filterset_fields = ('doctor__id', )