Приложение Activities, системы Карта Успеха
Материал из m6a
Содержание
Общее описание
Приложение `activities` отвечает за управление мероприятиями (активностями) в системе "Карта успеха". Каждое мероприятие связано с задачей и имеет определенную продолжительность и временные интервалы.
Модель данных
Activity
class Activity(models.Model): INTERVAL_CHOICES = [ ('not_important', 'Не важно'), ('morning', 'Утро'), ('afternoon', 'День'), ('evening', 'Вечер'), ('night', 'Ночь'), ] user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='activities') task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name='activities') name = models.CharField(max_length=100) description = models.TextField(blank=True) start_time = models.DateTimeField(null=True, blank=True) duration = models.DurationField(default=timedelta(minutes=30)) is_completed = models.BooleanField(default=False) depends_on = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True) lead_time = models.DurationField(default=timedelta(days=1)) interval = models.CharField(max_length=20, choices=INTERVAL_CHOICES)
ActivityManager
class ActivityManager(models.Manager): def total_duration_for_date(self, date): start_of_day = timezone.make_aware(timezone.datetime.combine(date, timezone.datetime.min.time())) end_of_day = timezone.make_aware(timezone.datetime.combine(date, timezone.datetime.max.time())) return self.filter(start_time__range=(start_of_day, end_of_day)).aggregate(total=Sum('duration'))['total']
Функциональность
Основные операции
- Создание мероприятий
- Редактирование мероприятий
- Удаление мероприятий
- Просмотр списка мероприятий
- Просмотр деталей мероприятия
Управление временем
- Планирование мероприятий
- Фильтрация по времени
- Расчет длительности
- Управление интервалами
Дополнительные функции
- Зависимости между мероприятиями
- Массовое обновление интервалов
- Календарное представление
- Планировщик мероприятий
URL маршруты
/activities/ ├── # Список мероприятий ├── '<int:pk>/' # Детали мероприятия ├── 'create/<int:task_id>/' # Создание ├── '<int:pk>/update/' # Обновление ├── '<int:pk>/delete/' # Удаление ├── 'calendar/' # Календарь ├── 'schedule/' # Планировщик └── 'update_interval/' # Обновление интервалов
Формы
ActivityForm
- (Опишите поля формы `ActivityForm`, например:
- `name` - CharField (поле для ввода названия)
- `description` - TextField (поле для ввода описания)
- `task` - ForeignKey (выбор задачи)
- `start_time` - DateTimeField (поле для ввода времени начала)
- `end_time` - DateTimeField (поле для ввода времени окончания)
- `duration` - IntegerField (поле для ввода длительности)
)
Шаблоны
Основные шаблоны
- `activity_list.html` - список мероприятий
- `activity_detail.html` - детали мероприятия
- `activity_form.html` - форма создания/редактирования
- `update_interval.html` - форма обновления интервалов
Особенности шаблонов
- Фильтрация мероприятий
- Отображение длительности
- Управление зависимостями
- Навигация по хлебным крошкам
Тестирование
Модульные тесты
- Создание мероприятия
- Валидация времени
- Расчет длительности
- Управление зависимостями
Проверяемые аспекты
- Корректность данных
- Ограничения модели
- Валидация полей
- Связи с задачами
Безопасность
Защита
- Декоратор `@login_required`
- Валидация данных
- Проверка прав доступа
- CSRF защита
Валидация
- Проверка времени
- Валидация длительности
- Обязательные поля
- Форматы данных
Интеграция
С другими приложениями
- Связь с задачами
- Связь с ресурсами
- Интеграция с пользователями
Сигналы
- `post_save` - после сохранения
- Обновление прогресса задачи
- Расчет длительности мероприятия
Особенности реализации
Управление временем
- Планировщик мероприятий
- Фильтрация по времени
- Расчет длительности
- Управление интервалами
Отслеживание зависимостей
- Ведущие мероприятия
- Время на подготовку
- Связи между мероприятиями
- Обновление статусов
Дополнительные поля
- Описание
- Интервал времени
- Длительность
- Статус выполнения