44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
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']
|