Приложение Projects, системы Карта Успеха — различия между версиями
Материал из m6a
Vshpagin (обсуждение | вклад) (Новая страница: «== Общее описание == Приложение `projects` отвечает за управление проектами в системе "Карта ус…») |
Vshpagin (обсуждение | вклад) (→ProjectForm) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 5: | Строка 5: | ||
=== Project === | === Project === | ||
− | + | class Project(models.Model): | |
− | + | user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='projects') | |
− | + | goal = models.ForeignKey(Goal, on_delete=models.CASCADE, related_name='projects') | |
− | + | name = models.CharField(max_length=100) | |
− | + | description = models.TextField(blank=True) | |
− | + | start_date = models.DateField(null=True, blank=True) | |
− | + | end_date = models.DateField(null=True, blank=True) | |
− | + | completion_percentage = models.IntegerField( | |
− | + | default=0, | |
− | + | validators=[MinValueValidator(0), MaxValueValidator(100)] | |
− | ) | + | ) |
+ | share_percentage = models.DecimalField( | ||
+ | max_digits=5, | ||
+ | decimal_places=2, | ||
+ | default=0, | ||
+ | validators=[MinValueValidator(0), MaxValueValidator(100)] | ||
+ | ) | ||
+ | is_archived = models.BooleanField(default=False) | ||
=== Методы модели === | === Методы модели === | ||
− | + | def clean(self): | |
− | + | """Валидация для дат и процентов.""" | |
− | + | if self.start_date and self.end_date and self.end_date < self.start_date: | |
− | ) | + | raise ValidationError('End date cannot be earlier than start date.') |
+ | if not (0 <= self.completion_percentage <= 100): | ||
+ | raise ValidationError('Completion percentage must be between 0 and 100.') | ||
+ | if not (0 <= self.share_percentage <= 100): | ||
+ | raise ValidationError('Share percentage must be between 0 and 100.') | ||
== Функциональность == | == Функциональность == | ||
Строка 43: | Строка 54: | ||
== URL маршруты == | == URL маршруты == | ||
− | + | /projects/ | |
− | + | ├── '' # Список проектов | |
− | + | ├── '<int:pk>/' # Детали проекта | |
− | + | ├── 'create/<int:goal_id>/' # Создание | |
− | + | ├── '<int:pk>/update/' # Обновление | |
− | + | ├── '<int:pk>/delete/' # Удаление | |
− | + | └── 'update_project_completion/<int:pk>/' # Обновление прогресса | |
− | + | ||
== Формы == | == Формы == | ||
=== ProjectForm === | === ProjectForm === | ||
− | + | class ProjectForm(forms.ModelForm): | |
− | + | fields = [ | |
− | + | 'goal', 'name', 'description', 'start_date', 'end_date', | |
− | + | 'completion_percentage', 'share_percentage', 'is_archived' | |
− | + | ] | |
− | + | labels = { | |
− | + | 'name': 'Название', | |
− | + | 'description': 'Описание', | |
− | + | 'goal': 'Цель', | |
+ | 'start_date': 'Дата начала', | ||
+ | 'end_date': 'Дата окончания', | ||
+ | 'completion_percentage': 'Процент завершения', | ||
+ | 'share_percentage': 'Доля в достижении цели', | ||
+ | 'is_archived': 'Архивный проект', | ||
+ | } | ||
== Шаблоны == | == Шаблоны == |
Текущая версия на 14:08, 30 марта 2025
Содержание
Общее описание
Приложение `projects` отвечает за управление проектами в системе "Карта успеха". Каждый проект связан с целью и содержит набор задач для её достижения.
Модель данных
Project
class Project(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='projects') goal = models.ForeignKey(Goal, on_delete=models.CASCADE, related_name='projects') name = models.CharField(max_length=100) description = models.TextField(blank=True) start_date = models.DateField(null=True, blank=True) end_date = models.DateField(null=True, blank=True) completion_percentage = models.IntegerField( default=0, validators=[MinValueValidator(0), MaxValueValidator(100)] ) share_percentage = models.DecimalField( max_digits=5, decimal_places=2, default=0, validators=[MinValueValidator(0), MaxValueValidator(100)] ) is_archived = models.BooleanField(default=False)
Методы модели
def clean(self): """Валидация для дат и процентов.""" if self.start_date and self.end_date and self.end_date < self.start_date: raise ValidationError('End date cannot be earlier than start date.') if not (0 <= self.completion_percentage <= 100): raise ValidationError('Completion percentage must be between 0 and 100.') if not (0 <= self.share_percentage <= 100): raise ValidationError('Share percentage must be between 0 and 100.')
Функциональность
Основные операции
- Создание проектов
- Редактирование проектов
- Удаление проектов
- Просмотр списка проектов
- Просмотр деталей проекта
Управление статусом
- Архивация проектов
- Фильтрация активных/архивных проектов
- Отслеживание прогресса
Дополнительные функции
- Расчет длительности мероприятий
- Управление задачами
- Обновление процента выполнения
URL маршруты
/projects/ ├── # Список проектов ├── '<int:pk>/' # Детали проекта ├── 'create/<int:goal_id>/' # Создание ├── '<int:pk>/update/' # Обновление ├── '<int:pk>/delete/' # Удаление └── 'update_project_completion/<int:pk>/' # Обновление прогресса
Формы
ProjectForm
class ProjectForm(forms.ModelForm): fields = [ 'goal', 'name', 'description', 'start_date', 'end_date', 'completion_percentage', 'share_percentage', 'is_archived' ] labels = { 'name': 'Название', 'description': 'Описание', 'goal': 'Цель', 'start_date': 'Дата начала', 'end_date': 'Дата окончания', 'completion_percentage': 'Процент завершения', 'share_percentage': 'Доля в достижении цели', 'is_archived': 'Архивный проект', }
Шаблоны
Основные шаблоны
- `project_list.html` - список проектов
- `project_detail.html` - детали проекта
- `project_form.html` - форма создания/редактирования
Особенности шаблонов
- Фильтрация проектов
- Отображение прогресса
- Управление задачами
- Навигация по хлебным крошкам
Тестирование
Модульные тесты
- Валидация процента выполнения
- Проверка дат
- Тест пустых полей
- Валидация доли в достижении цели
Проверяемые аспекты
- Корректность данных
- Ограничения модели
- Валидация полей
- Связи с целями
Безопасность
Защита
- Декоратор `@login_required`
- Валидация данных
- Проверка прав доступа
- CSRF защита
Валидация
- Проверка процентов
- Валидация дат
- Обязательные поля
- Форматы данных
Интеграция
С другими приложениями
- Связь с целями
- Связь с задачами
- Интеграция с пользователями
Сигналы
- `post_save` - после сохранения
- `post_delete` - после удаления
- Обновление прогресса цели
- Расчет взвешенного завершения
Особенности реализации
Управление прогрессом
- Автоматический расчет
- Взвешенное завершение
- Обновление связанных целей
Отслеживание времени
- Даты начала и окончания
- Длительность мероприятий
- Расчет прогресса
Дополнительные поля
- Доля в достижении цели
- Архивный статус
- Описание проекта