76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
from django.conf import settings
|
|
from django.db import models
|
|
from django.db.models import Q
|
|
from django.utils import timezone
|
|
|
|
|
|
class TaskQuerySet(models.QuerySet):
|
|
def get_ordered(self):
|
|
return self.order_by('task_list')
|
|
|
|
|
|
class TaskManager(models.Manager):
|
|
def get_tasks(self, user, completed):
|
|
if completed:
|
|
return self.get_queryset().get_ordered().filter(Q(assigned_to=user))
|
|
else:
|
|
return self.get_queryset().get_ordered().filter(
|
|
Q(assigned_to=user)
|
|
& Q(completed=completed)
|
|
)
|
|
|
|
def get_queryset(self):
|
|
return TaskQuerySet(self.model, using=self._db)
|
|
|
|
|
|
class TaskList(models.Model):
|
|
name = models.CharField(max_length=60)
|
|
slug = models.SlugField(unique=True, null=True, blank=True)
|
|
|
|
objects = models.Manager()
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class Task(models.Model):
|
|
title = models.CharField(max_length=140)
|
|
task_list = models.ForeignKey(TaskList, on_delete=models.CASCADE, null=True)
|
|
|
|
created_date = models.DateTimeField(auto_now_add=True)
|
|
due_date = models.DateField(blank=True, null=True)
|
|
|
|
completed = models.BooleanField(default=False)
|
|
completed_date = models.DateField(blank=True, null=True)
|
|
|
|
created_by = models.ForeignKey(
|
|
settings.AUTH_USER_MODEL,
|
|
related_name="todo_created_by",
|
|
on_delete=models.CASCADE,
|
|
)
|
|
assigned_to = models.ForeignKey(
|
|
settings.AUTH_USER_MODEL,
|
|
blank=True,
|
|
null=True,
|
|
related_name="todo_assigned_to",
|
|
on_delete=models.CASCADE,
|
|
)
|
|
|
|
note = models.TextField(blank=True, null=True)
|
|
priority = models.PositiveIntegerField(blank=True, null=True)
|
|
|
|
objects = models.Manager()
|
|
taskmanager = TaskManager()
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
def save(self, *args, **kwargs):
|
|
if self.completed and not self.completed_date:
|
|
self.completed_date = timezone.now().date()
|
|
|
|
if not self.completed and self.completed_date:
|
|
self.completed_date = None
|
|
|
|
super().save(*args, **kwargs)
|