Приложение Projects, системы Карта Успеха — различия между версиями

Материал из m6a
Перейти к: навигация, поиск
(Методы модели)
(ProjectForm)
 
(не показаны 3 промежуточные версии этого же участника)
Строка 54: Строка 54:
  
 
== URL маршруты ==
 
== URL маршруты ==
* (Перечислите URL маршруты приложения и их соответствие представлениям, например:
+
  /projects/
** `/projects/` - Список проектов
+
  ├── ''                    # Список проектов
** `/projects/<int:pk>/` - Детали проекта
+
  ├── '<int:pk>/'          # Детали проекта
** `/projects/create/` - Создание проекта
+
  ├── 'create/<int:goal_id>/'  # Создание
** `/projects/<int:pk>/update/` - Обновление проекта
+
  ├── '<int:pk>/update/'  # Обновление
** `/projects/<int:pk>/delete/` - Удаление проекта
+
  ├── '<int:pk>/delete/'  # Удаление
** `/projects/<int:pk>/archive/` - Архивирование проекта
+
  └── 'update_project_completion/<int:pk>/'  # Обновление прогресса
)
+
  
 
== Формы ==
 
== Формы ==
  
 
=== ProjectForm ===
 
=== ProjectForm ===
* (Опишите поля формы `ProjectForm`, например:
+
  class ProjectForm(forms.ModelForm):
** `name` - CharField (поле для ввода названия)
+
    fields = [
** `description` - TextField (поле для ввода описания)
+
        'goal', 'name', 'description', 'start_date', 'end_date',
** `goal` - ForeignKey (выбор цели)
+
        'completion_percentage', 'share_percentage', 'is_archived'
** `start_date` - DateField (поле для ввода даты начала)
+
    ]
** `end_date` - DateField (поле для ввода даты окончания)
+
    labels = {
** `completion_percentage` - IntegerField (поле для ввода процента выполнения)
+
        'name': 'Название',
** `contribution_to_goal` - IntegerField (поле для ввода доли в достижении цели)
+
        '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` - после удаления
  • Обновление прогресса цели
  • Расчет взвешенного завершения

Особенности реализации

Управление прогрессом

  • Автоматический расчет
  • Взвешенное завершение
  • Обновление связанных целей

Отслеживание времени

  • Даты начала и окончания
  • Длительность мероприятий
  • Расчет прогресса

Дополнительные поля

  • Доля в достижении цели
  • Архивный статус
  • Описание проекта