from rest_framework import serializers from .models import Project, Task from accounts.serializers import UserSerializer class TaskSerializer(serializers.ModelSerializer): class Meta: model = Task fields = ['id', 'project', 'title', 'description', 'assigned_to', 'status', 'priority', 'due_date', 'created_at', 'updated_at'] read_only_fields = ['id', 'project', 'created_at', 'updated_at'] from django.contrib.auth import get_user_model User = get_user_model() class TaskDetailSerializer(TaskSerializer): assigned_to = UserSerializer(read_only=True) assigned_to_id = serializers.PrimaryKeyRelatedField( source='assigned_to', queryset=User.objects.all(), required=False, allow_null=True ) class Meta(TaskSerializer.Meta): fields = TaskSerializer.Meta.fields + ['assigned_to_id'] class ProjectSerializer(serializers.ModelSerializer): task_count = serializers.SerializerMethodField() class Meta: model = Project fields = ['id', 'name', 'description', 'status', 'created_by', 'created_at', 'updated_at', 'task_count'] read_only_fields = ['id', 'created_by', 'created_at', 'updated_at', 'task_count'] def get_task_count(self, obj): return obj.tasks.count() class ProjectDetailSerializer(ProjectSerializer): tasks = TaskSerializer(many=True, read_only=True) created_by = UserSerializer(read_only=True) class Meta(ProjectSerializer.Meta): fields = ProjectSerializer.Meta.fields + ['tasks']