Приложение 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` - после удаления
 - Обновление прогресса цели
 - Расчет взвешенного завершения
 
Особенности реализации
Управление прогрессом
- Автоматический расчет
 - Взвешенное завершение
 - Обновление связанных целей
 
Отслеживание времени
- Даты начала и окончания
 - Длительность мероприятий
 - Расчет прогресса
 
Дополнительные поля
- Доля в достижении цели
 - Архивный статус
 - Описание проекта