/
oriono
/
taskman
Обзор
Документация
Войти
/
oriono
/
taskman
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
task_manager/notes/forms.py
65 строк
2 KB
abo
refactor: clean form validation logic and improve test coverage of notes
02 июн 2026, 15:27
02 июн 2026, 15:27
5c30bb4
Код
Авторство
О чём код?
from django import forms from django.utils.translation import gettext_lazy as _ from task_manager.notes.models import Note from task_manager.tasks.models import Task class NoteForm(forms.ModelForm): class Meta: model = Note fields = ['title', 'content', 'task'] def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) super().__init__(*args, **kwargs) if self.request is None or not self.request.user.is_authenticated: return user = self.request.user team = getattr(self.request, 'active_team', None) # Filter tasks based on context (team or individual) if team: self.fields['task'].queryset = Task.objects.filter(team=team) else: self.fields['task'].queryset = Task.objects.filter( author=user, team__isnull=True ) # Make task field not required self.fields['task'].required = False self.fields['task'].help_text = _("Optional") def clean_task(self): task = self.cleaned_data.get('task') if (not task or not self.request or not self.request.user.is_authenticated): return task user = self.request.user team = getattr(self.request, 'active_team', None) # Validate task belongs to user's context error_message = self._validate_task_context(task, user, team) if error_message is not None: raise forms.ValidationError(error_message) return task def _validate_task_context(self, task, user, team): """Validate task context and return error message or None if valid.""" if team: # Team context: task must belong to same team if task.team != team: return _("Task must be from the same team.") else: # Individual context: task must be personal if task.team is not None: return _("Cannot attach note to team task in individual mode.") if task.author != user: return _("You can only attach notes to your own tasks.") return None