Приложение Activities, системы Карта Успеха — различия между версиями
Материал из m6a
Vshpagin (обсуждение | вклад) (→Activity) |
Vshpagin (обсуждение | вклад) (→ActivityForm) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 13: | Строка 13: | ||
('night', 'Ночь'), | ('night', 'Ночь'), | ||
] | ] | ||
− | |||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='activities') | user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='activities') | ||
task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name='activities') | task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name='activities') | ||
Строка 26: | Строка 25: | ||
=== ActivityManager === | === 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'] | ||
== Функциональность == | == Функциональность == | ||
Строка 52: | Строка 53: | ||
== URL маршруты == | == URL маршруты == | ||
− | + | /activities/ | |
− | + | ├── '' # Список мероприятий | |
− | + | ├── '<int:pk>/' # Детали мероприятия | |
− | + | ├── 'create/<int:task_id>/' # Создание | |
− | + | ├── '<int:pk>/update/' # Обновление | |
− | + | ├── '<int:pk>/delete/' # Удаление | |
− | + | ├── 'calendar/' # Календарь | |
− | + | ├── 'schedule/' # Планировщик | |
+ | └── 'update_interval/' # Обновление интервалов | ||
== Формы == | == Формы == | ||
=== ActivityForm === | === ActivityForm === | ||
− | + | class ActivityForm(forms.ModelForm): | |
− | + | DURATION_CHOICES = [ | |
− | + | ('0:05:00', '5 минут'), | |
− | + | ('0:10:00', '10 минут'), | |
− | + | # ... другие варианты длительности | |
− | + | ] | |
− | + | ||
− | ) | + | LEAD_TIME_CHOICES = [ |
+ | ('0:30:00', '30 минут'), | ||
+ | ('1:00:00', '1 час'), | ||
+ | # ... другие варианты времени | ||
+ | ] | ||
+ | |||
+ | INTERVAL_CHOICES = [ | ||
+ | ('not_important', 'Не важно'), | ||
+ | ('morning', 'Утро'), | ||
+ | # ... другие интервалы | ||
+ | ] | ||
== Шаблоны == | == Шаблоны == |
Текущая версия на 14:19, 30 марта 2025
Содержание
Общее описание
Приложение `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
class ActivityForm(forms.ModelForm): DURATION_CHOICES = [ ('0:05:00', '5 минут'), ('0:10:00', '10 минут'), # ... другие варианты длительности ]
LEAD_TIME_CHOICES = [ ('0:30:00', '30 минут'), ('1:00:00', '1 час'), # ... другие варианты времени ]
INTERVAL_CHOICES = [ ('not_important', 'Не важно'), ('morning', 'Утро'), # ... другие интервалы ]
Шаблоны
Основные шаблоны
- `activity_list.html` - список мероприятий
- `activity_detail.html` - детали мероприятия
- `activity_form.html` - форма создания/редактирования
- `update_interval.html` - форма обновления интервалов
Особенности шаблонов
- Фильтрация мероприятий
- Отображение длительности
- Управление зависимостями
- Навигация по хлебным крошкам
Тестирование
Модульные тесты
- Создание мероприятия
- Валидация времени
- Расчет длительности
- Управление зависимостями
Проверяемые аспекты
- Корректность данных
- Ограничения модели
- Валидация полей
- Связи с задачами
Безопасность
Защита
- Декоратор `@login_required`
- Валидация данных
- Проверка прав доступа
- CSRF защита
Валидация
- Проверка времени
- Валидация длительности
- Обязательные поля
- Форматы данных
Интеграция
С другими приложениями
- Связь с задачами
- Связь с ресурсами
- Интеграция с пользователями
Сигналы
- `post_save` - после сохранения
- Обновление прогресса задачи
- Расчет длительности мероприятия
Особенности реализации
Управление временем
- Планировщик мероприятий
- Фильтрация по времени
- Расчет длительности
- Управление интервалами
Отслеживание зависимостей
- Ведущие мероприятия
- Время на подготовку
- Связи между мероприятиями
- Обновление статусов
Дополнительные поля
- Описание
- Интервал времени
- Длительность
- Статус выполнения