I want to filter and count the tasks based on their status. Additionally, I also want to add a count of tasks that are due in this week. I tried using .annotate() and .values(), but I am facing key error. Here is my code, as well as the error.
Here is my code: models.py:
class TaskStatus(models.Model):
status = models.CharField(max_length=200)
def __str__(self):
return(self.status)
class Task_category(models.Model):
job = models.ForeignKey(Job,related_name='Job',on_delete=models.CASCADE, null=True)
assigner = models.ForeignKey(User,related_name='assigner', on_delete=models.PROTECT, null=True)
assignee = models.ForeignKey(User,related_name='assignee', on_delete=models.PROTECT, null=True)
unit = models.ForeignKey(Unit,related_name='UnitName',on_delete=models.CASCADE, null=True)
equipment = models.ForeignKey(Equipment,related_name='EquipmentName',on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=200)
category = models.CharField(max_length=200, null=True,blank=True)
start_date = models.DateField()
end_date = models.DateField()
created_at = models.DateTimeField(auto_now_add=True,blank=True, null=True)
updated_at = models.DateTimeField(auto_now=True,blank=True, null=True)
status = models.ForeignKey(TaskStatus, related_name='Status',on_delete=models.CASCADE)
def __str__(self):
return(self.name)
serializers.py:
class TaskcategorySerializer(serializers.ModelSerializer):
class Meta:
model = Task_category
fields = ['id','job','name','category','start_date','end_date','created_at','updated_at','status','assignee', 'unit', 'equipment', 'assigner']
def to_representation(self, instance):
rep = super(TaskcategorySerializer, self).to_representation(instance)
rep['job'] = instance.job.name
rep['unit'] = instance.unit.name
rep['equipment'] = instance.equipment.name
rep['status'] = instance.status.status
return rep
views.py:
class ChartView(viewsets.ModelViewSet):
http_method_names = ["get"]
queryset = Task_category.objects.all()
serializer_class = TaskcategorySerializer
def get_queryset(self):
return Task_category.objects.annotate(value=Count('status')).values('status__status')
Please help. Any sort of help will be appreciated!!
