Приложение Life Needs, системы Карта Успеха — различия между версиями
Материал из m6a
Vshpagin (обсуждение | вклад) (Новая страница: «== Общее описание == Приложение `life_needs` отвечает за управление жизненными потребностями п…») |
Vshpagin (обсуждение | вклад) (→Конфигурация) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 5: | Строка 5: | ||
=== LifeNeed === | === LifeNeed === | ||
− | + | class LifeNeed(models.Model): | |
− | + | user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='life_needs') | |
− | + | category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='life_needs') | |
− | + | name = models.CharField(max_length=100) | |
− | + | description = models.TextField(blank=True) | |
− | + | completion_percentage = models.IntegerField(default=0) | |
− | + | priority = models.IntegerField(unique=True) | |
− | + | conditions_for_satisfaction = models.TextField(blank=True) | |
− | ) | + | dissatisfaction_risks = models.TextField(blank=True) |
+ | satisfaction_methods = models.TextField(blank=True) | ||
=== Методы модели === | === Методы модели === | ||
− | + | def clean(self): | |
− | + | # Валидация процента выполнения | |
− | + | if not (0 <= self.completion_percentage <= 100): | |
− | ) | + | raise ValidationError('Completion percentage must be between 0 and 100.') |
+ | |||
+ | def increase_completion(self, amount): | ||
+ | # Увеличение процента выполнения | ||
+ | self.completion_percentage = min(self.completion_percentage + amount, 100) | ||
+ | self.save() | ||
== Функциональность == | == Функциональность == | ||
Строка 41: | Строка 47: | ||
== URL маршруты == | == URL маршруты == | ||
− | + | /life-needs/ | |
− | + | ├── '' # Список потребностей | |
− | + | ├── '<int:pk>/' # Детали потребности | |
− | + | ├── 'create/<int:categories_id>/' # Создание | |
− | + | ├── '<int:pk>/update/' # Обновление | |
− | + | ├── '<int:pk>/delete/' # Удаление | |
− | + | ├── 'load_goals/<int:life_need_id>/' # Загрузка целей | |
+ | ├── '<int:pk>/increase_priority/' # Повышение приоритета | ||
+ | └── '<int:pk>/decrease_priority/' # Понижение приоритета | ||
== Формы == | == Формы == | ||
=== LifeNeedForm === | === LifeNeedForm === | ||
− | + | class LifeNeedForm(forms.ModelForm): | |
− | + | fields = [ | |
− | + | 'name', | |
− | + | 'description', | |
− | + | 'category', | |
+ | 'conditions_for_satisfaction', | ||
+ | 'dissatisfaction_risks', | ||
+ | 'satisfaction_methods' | ||
+ | ] | ||
=== Валидация === | === Валидация === | ||
Строка 120: | Строка 132: | ||
=== Конфигурация === | === Конфигурация === | ||
− | + | class LifeNeedsConfig(AppConfig): | |
− | + | default_auto_field = 'django.db.models.BigAutoField' | |
− | + | name = 'karta_uspeha.life_needs' | |
− | + | ||
+ | def ready(self): | ||
+ | import karta_uspeha.life_needs.signals | ||
=== Обработка событий === | === Обработка событий === |
Текущая версия на 13:58, 30 марта 2025
Содержание
Общее описание
Приложение `life_needs` отвечает за управление жизненными потребностями пользователя. Каждая жизненная потребность принадлежит определенной категории и имеет свой приоритет и процент выполнения.
Модель данных
LifeNeed
class LifeNeed(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='life_needs') category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='life_needs') name = models.CharField(max_length=100) description = models.TextField(blank=True) completion_percentage = models.IntegerField(default=0) priority = models.IntegerField(unique=True) conditions_for_satisfaction = models.TextField(blank=True) dissatisfaction_risks = models.TextField(blank=True) satisfaction_methods = models.TextField(blank=True)
Методы модели
def clean(self): # Валидация процента выполнения if not (0 <= self.completion_percentage <= 100): raise ValidationError('Completion percentage must be between 0 and 100.')
def increase_completion(self, amount): # Увеличение процента выполнения self.completion_percentage = min(self.completion_percentage + amount, 100) self.save()
Функциональность
Основные операции
- Создание жизненных потребностей
- Редактирование жизненных потребностей
- Удаление жизненных потребностей
- Просмотр списка потребностей
- Просмотр деталей потребности
Управление приоритетами
- Повышение приоритета
- Понижение приоритета
- Автоматическое назначение приоритета при создании
Дополнительные функции
- Загрузка целей из JSON
- Отслеживание процента выполнения
- Управление условиями удовлетворения
URL маршруты
/life-needs/ ├── # Список потребностей ├── '<int:pk>/' # Детали потребности ├── 'create/<int:categories_id>/' # Создание ├── '<int:pk>/update/' # Обновление ├── '<int:pk>/delete/' # Удаление ├── 'load_goals/<int:life_need_id>/' # Загрузка целей ├── '<int:pk>/increase_priority/' # Повышение приоритета └── '<int:pk>/decrease_priority/' # Понижение приоритета
Формы
LifeNeedForm
class LifeNeedForm(forms.ModelForm): fields = [ 'name', 'description', 'category', 'conditions_for_satisfaction', 'dissatisfaction_risks', 'satisfaction_methods' ]
Валидация
- Проверка обязательных полей
- Валидация категории
- Проверка имени потребности
Шаблоны
Основные шаблоны
- `life_need_list.html` - список потребностей
- `life_need_detail.html` - детали потребности
- `life_need_form.html` - форма создания/редактирования
Особенности шаблонов
- Навигация по хлебным крошкам
- Табличное отображение данных
- Кнопки управления приоритетом
- Формы с валидацией
Тестирование
Модульные тесты
- Создание жизненной потребности
- Валидация процента выполнения
- Проверка уникальности приоритета
- Тест метода `increase_completion`
Проверяемые аспекты
- Корректность данных
- Ограничения модели
- Валидация полей
- Связи с категориями
Безопасность
Защита
- Декоратор `@login_required`
- Валидация данных
- Проверка прав доступа
- CSRF защита
Валидация
- Проверка процента выполнения
- Уникальность приоритета
- Обязательные поля
- Форматы данных
Интеграция
С другими приложениями
- Связь с категориями
- Связь с целями
- Интеграция с пользователями
Импорт данных
- Загрузка целей из JSON
- Массовое создание
- Обработка ошибок
- Логирование
Сигналы
Конфигурация
class LifeNeedsConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'karta_uspeha.life_needs'
def ready(self): import karta_uspeha.life_needs.signals
Обработка событий
- `post_save` - после сохранения
- `post_delete` - после удаления
- Обновление связанных данных
Особенности реализации
Управление приоритетами
- Автоматическое назначение
- Переупорядочивание
- Проверка уникальности
Отслеживание прогресса
- Процент выполнения
- Методы увеличения прогресса
- Ограничения значений
Дополнительные поля
- Условия удовлетворения
- Риски неудовлетворенности
- Методы удовлетворения