Приложение Tasks, системы Карта Успеха — различия между версиями
Материал из m6a
Vshpagin (обсуждение | вклад) (Новая страница: «== Общее описание == Приложение `tasks` отвечает за управление задачами в системе "Карта успе…») |
Vshpagin (обсуждение | вклад) (→CopyTaskForm) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 5: | Строка 5: | ||
=== Task === | === Task === | ||
− | + | class Task(models.Model): | |
− | + | user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='tasks') | |
− | + | project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='tasks') | |
− | + | name = models.CharField(max_length=100) | |
− | + | description = models.TextField(blank=True) | |
− | + | deadline = models.DateTimeField(null=True, blank=True) | |
− | + | completion_percentage = models.IntegerField(default=0) | |
− | ) | + | |
=== Методы модели === | === Методы модели === | ||
− | + | def clean(self): | |
− | ** | + | """Валидация процента завершенности.""" |
− | + | if not (0 <= self.completion_percentage <= 100): | |
− | ) | + | raise ValidationError('Процент завершенности должен быть между 0 и 100.') |
+ | |||
+ | def save(self, *args, **kwargs): | ||
+ | """Автоматический расчет процента завершенности.""" | ||
+ | self.clean() | ||
+ | activities = self.activities.all() | ||
+ | total_activities = activities.count() | ||
+ | if total_activities > 0: | ||
+ | completed_activities = activities.filter(is_completed=True).count() | ||
+ | self.completion_percentage = int((completed_activities / total_activities) * 100) | ||
+ | else: | ||
+ | self.completion_percentage = 0 | ||
+ | super().save(*args, **kwargs) | ||
== Функциональность == | == Функциональность == | ||
Строка 40: | Строка 51: | ||
== URL маршруты == | == URL маршруты == | ||
− | + | /tasks/ | |
− | + | ├── '' # Список задач | |
− | + | ├── '<int:pk>/' # Детали задачи | |
− | + | ├── 'create/<int:project_id>/' # Создание | |
− | + | ├── '<int:pk>/update/' # Обновление | |
− | + | ├── '<int:pk>/delete/' # Удаление | |
− | + | ├── 'update_task_completion/<int:pk>/' # Обновление прогресса | |
− | + | └── 'task_create_repeating/<int:task_id>/' # Копирование задачи | |
== Формы == | == Формы == | ||
=== TaskForm === | === TaskForm === | ||
− | + | class TaskForm(forms.ModelForm): | |
− | + | fields = ['project', 'name', 'description', 'deadline'] | |
− | + | labels = { | |
− | + | 'name': 'Название', | |
− | + | 'project': 'Проект', | |
− | + | 'description': 'Описание', | |
− | + | 'deadline': 'Срок', | |
+ | } | ||
=== CopyTaskForm === | === CopyTaskForm === | ||
− | + | class CopyTaskForm(forms.Form): | |
+ | start_date = forms.DateField(label="Начальная дата") | ||
+ | end_date = forms.DateField(label="Конечная дата") | ||
== Шаблоны == | == Шаблоны == |
Текущая версия на 14:13, 30 марта 2025
Содержание
Общее описание
Приложение `tasks` отвечает за управление задачами в системе "Карта успеха". Каждая задача связана с проектом и содержит набор мероприятий для её выполнения.
Модель данных
Task
class Task(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='tasks') project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='tasks') name = models.CharField(max_length=100) description = models.TextField(blank=True) deadline = models.DateTimeField(null=True, blank=True) completion_percentage = models.IntegerField(default=0)
Методы модели
def clean(self): """Валидация процента завершенности.""" if not (0 <= self.completion_percentage <= 100): raise ValidationError('Процент завершенности должен быть между 0 и 100.')
def save(self, *args, **kwargs): """Автоматический расчет процента завершенности.""" self.clean() activities = self.activities.all() total_activities = activities.count() if total_activities > 0: completed_activities = activities.filter(is_completed=True).count() self.completion_percentage = int((completed_activities / total_activities) * 100) else: self.completion_percentage = 0 super().save(*args, **kwargs)
Функциональность
Основные операции
- Создание задач
- Редактирование задач
- Удаление задач
- Просмотр списка задач
- Просмотр деталей задачи
Управление статусом
- Фильтрация задач (срочные, активные, просроченные)
- Отслеживание прогресса
- Копирование задач
Дополнительные функции
- Расчет длительности мероприятий
- Управление мероприятиями
- Автоматическое обновление прогресса
URL маршруты
/tasks/ ├── # Список задач ├── '<int:pk>/' # Детали задачи ├── 'create/<int:project_id>/' # Создание ├── '<int:pk>/update/' # Обновление ├── '<int:pk>/delete/' # Удаление ├── 'update_task_completion/<int:pk>/' # Обновление прогресса └── 'task_create_repeating/<int:task_id>/' # Копирование задачи
Формы
TaskForm
class TaskForm(forms.ModelForm): fields = ['project', 'name', 'description', 'deadline'] labels = { 'name': 'Название', 'project': 'Проект', 'description': 'Описание', 'deadline': 'Срок', }
CopyTaskForm
class CopyTaskForm(forms.Form): start_date = forms.DateField(label="Начальная дата") end_date = forms.DateField(label="Конечная дата")
Шаблоны
Основные шаблоны
- `task_list.html` - список задач
- `task_detail.html` - детали задачи
- `task_form.html` - форма создания/редактирования
- `task_copy_form.html` - форма копирования задачи
Особенности шаблонов
- Фильтрация задач
- Отображение прогресса
- Управление мероприятиями
- Навигация по хлебным крошкам
Тестирование
Модульные тесты
- Создание задачи
- Валидация процента завершенности
- Расчет прогресса
- Копирование задач
Проверяемые аспекты
- Корректность данных
- Ограничения модели
- Валидация полей
- Связи с проектами
Безопасность
Защита
- Декоратор `@login_required`
- Валидация данных
- Проверка прав доступа
- CSRF защита
Валидация
- Проверка процентов
- Валидация дат
- Обязательные поля
- Форматы данных
Интеграция
С другими приложениями
- Связь с проектами
- Связь с мероприятиями
- Интеграция с пользователями
Сигналы
- `post_save` - после сохранения
- Обновление прогресса проекта
- Автоматический расчет процентов
Особенности реализации
Управление прогрессом
- Автоматический расчет
- Обновление связанных проектов
- Отслеживание мероприятий
Отслеживание времени
- Дедлайны
- Длительность мероприятий
- Копирование задач
Дополнительные поля
- Описание
- Связь с проектом
- Процент завершенности