Je dois compter le nombre d'enfants dont un objet dispose et renvoyer cette valeur dans mon API via le sérialiseur d'objet. J'ai également besoin de compter un sous-ensemble de ces objets enfants.Django rest_framework: nombre d'objets enfants dans le sérialiseur
J'ai un objet Tâche avec des enfants Asignees. Dans mon API lorsque je fais une recherche les tâches que je veux avoir l'ensemble de données suivantes retourné:
[
{ label: "Cross the bridge",
count_assigned: 5,
count_completed: 3 },
{ label: "Build a fire",
count_assigned: 5,
count_completed: 2 }
]
Comment puis-je faire cela? J'ai trouvé la méthode .annotate() mais ce résultat n'est pas disponible dans la classe sérialiseur.
models.py
class Task(models.Model):
label = models.CharField(max_length=255,null=False,blank=False)
class Assignee(models.model):
task = models.ForeignKey(Task, related_name='assignees', on_delete=models.CASCADE, blank=True, null=True)
person = models.ForeignKey(Person, on_delete=models.CASCADE, blank=True, null=True)
completed = models.DateTimeField(null=True,blank=True)
serializers.py
from rest_framework import serializers
from .models import Task, Assignee
from people.serializers import PersonSerializer
class AssigneeSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
person = PersonSerializer(read_only=True)
class Meta:
model = Assignee
fields = ('id','task','person','completed')
read_only_fields = ['id']
class TaskSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Task
fields = ('id', 'label')
read_only_fields = ['id']
Qu'est-ce que votre point de vue ressemble-t-API? Utilisez-vous un spectateur? Si oui [cette réponse] (https://stackoverflow.com/a/36697562/104349) (notez, pas la réponse acceptée sur cette question) fera ce que vous voulez. –