feat: add models, serializers, and viewsets for Task, SubTask, and AssignedTask
This commit is contained in:
parent
999c7c0589
commit
f8a22c571c
6 changed files with 98 additions and 22 deletions
|
|
@ -38,6 +38,7 @@ INSTALLED_APPS = [
|
|||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'rest_framework',
|
||||
'task_app',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
|
|
|||
28
join/urls.py
28
join/urls.py
|
|
@ -1,22 +1,14 @@
|
|||
"""
|
||||
URL configuration for join project.
|
||||
|
||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||
https://docs.djangoproject.com/en/5.1/topics/http/urls/
|
||||
Examples:
|
||||
Function views
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
||||
Class-based views
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
||||
Including another URLconf
|
||||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import path
|
||||
from django.urls import path, include
|
||||
from rest_framework.routers import DefaultRouter
|
||||
from task_app.views import TaskViewSet, SubTaskViewSet, AssignedTaskViewSet
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register(r'tasks', TaskViewSet)
|
||||
router.register(r'subtasks', SubTaskViewSet)
|
||||
router.register(r'assigned_tasks', AssignedTaskViewSet)
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
]
|
||||
path('api/', include(router.urls)),
|
||||
]
|
||||
|
|
@ -1,3 +1,17 @@
|
|||
from django.contrib import admin
|
||||
from .models import Task, SubTask, AssignedTask
|
||||
|
||||
# Register your models here.
|
||||
class SubTaskInline(admin.TabularInline):
|
||||
model = SubTask
|
||||
extra = 1
|
||||
|
||||
class AssignedTaskInline(admin.TabularInline):
|
||||
model = AssignedTask
|
||||
extra = 1
|
||||
|
||||
@admin.register(Task)
|
||||
class TaskAdmin(admin.ModelAdmin):
|
||||
list_display = ('title', 'category', 'status', 'priority', 'creator', 'date')
|
||||
search_fields = ('title', 'category', 'creator__username')
|
||||
list_filter = ('status', 'priority', 'date')
|
||||
inlines = [SubTaskInline, AssignedTaskInline]
|
||||
|
|
@ -1,3 +1,35 @@
|
|||
from django.db import models
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
# Create your models here.
|
||||
User = get_user_model()
|
||||
|
||||
class Task(models.Model):
|
||||
title = models.CharField(max_length=255)
|
||||
description = models.TextField(blank=True, null=True)
|
||||
category = models.CharField(max_length=50, choices=[('technical_task', 'Technical Task'), ('user_story', 'User Story')])
|
||||
priority = models.CharField(max_length=50, choices=[('low', 'Low'), ('medium', 'Medium'), ('urgent', 'Urgent')])
|
||||
status = models.CharField(max_length=50, choices=[('todo', 'Todo'), ('in_progress', 'In Progress'), ('await_feedback', 'Await feedback'), ('done', 'Done')])
|
||||
date = models.DateField()
|
||||
|
||||
creator = models.ForeignKey(User, related_name="created_tasks", on_delete=models.CASCADE)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
|
||||
class SubTask(models.Model):
|
||||
task = models.ForeignKey(Task, related_name="subtasks", on_delete=models.CASCADE)
|
||||
title = models.CharField(max_length=255)
|
||||
done = models.BooleanField(default=False)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.task.title} - {self.title}"
|
||||
|
||||
|
||||
class AssignedTask(models.Model):
|
||||
task = models.ForeignKey(Task, related_name="assigned_users", on_delete=models.CASCADE)
|
||||
user = models.ForeignKey(User, related_name="assigned_tasks", on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.user.username} assigned to {self.task.title}"
|
||||
25
task_app/serializers.py
Normal file
25
task_app/serializers.py
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
from rest_framework import serializers
|
||||
from django.contrib.auth import get_user_model
|
||||
from .models import Task, SubTask, AssignedTask
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
class SubTaskSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SubTask
|
||||
fields = '__all__'
|
||||
|
||||
class AssignedTaskSerializer(serializers.ModelSerializer):
|
||||
user = serializers.StringRelatedField() # Gibt den Usernamen zurück, anstatt der ID
|
||||
|
||||
class Meta:
|
||||
model = AssignedTask
|
||||
fields = '__all__'
|
||||
|
||||
class TaskSerializer(serializers.ModelSerializer):
|
||||
subtasks = SubTaskSerializer(many=True, read_only=True)
|
||||
assigned_users = AssignedTaskSerializer(many=True, read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Task
|
||||
fields = '__all__'
|
||||
|
|
@ -1,3 +1,15 @@
|
|||
from django.shortcuts import render
|
||||
from rest_framework import viewsets
|
||||
from .models import Task, SubTask, AssignedTask
|
||||
from .serializers import TaskSerializer, SubTaskSerializer, AssignedTaskSerializer
|
||||
|
||||
# Create your views here.
|
||||
class TaskViewSet(viewsets.ModelViewSet):
|
||||
queryset = Task.objects.all()
|
||||
serializer_class = TaskSerializer
|
||||
|
||||
class SubTaskViewSet(viewsets.ModelViewSet):
|
||||
queryset = SubTask.objects.all()
|
||||
serializer_class = SubTaskSerializer
|
||||
|
||||
class AssignedTaskViewSet(viewsets.ModelViewSet):
|
||||
queryset = AssignedTask.objects.all()
|
||||
serializer_class = AssignedTaskSerializer
|
||||
Loading…
Reference in a new issue