/
oriono
/
taskman
Обзор
Документация
Войти
/
oriono
/
taskman
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
task_manager/tasks/forms.py
67 строк
2 KB
abo
Fix task creation for anonymous users
04 май 2026, 01:00
04 май 2026, 01:00
2f978fd
Код
Авторство
О чём код?
from task_manager.tasks.models import Task from task_manager.user.models import User from task_manager.statuses.models import Status from task_manager.labels.models import Label from django import forms class TaskForm(forms.ModelForm): class Meta: model = Task fields = [ 'name', 'description', 'status', 'executors', 'labels', ] def __init__(self, *args, **kwargs): # The request object is added to the form # via the get_form_kwargs() method in the view. # This is necessary to filter the form fields # depending on the user and their team. self.request = kwargs.pop('request', None) super().__init__(*args, **kwargs) if self.request is None: return user = self.request.user # Protection against anonymous users if not user.is_authenticated: return team = getattr(self.request, 'active_team', None) if team: # team mode - only active members can be executors self.fields['executors'].queryset = User.objects.filter( team_memberships__team=team, team_memberships__status='active' ) self.fields['status'].queryset = Status.objects.filter( team=team ) self.fields['labels'].queryset = Label.objects.filter( team=team ) # if team has only one member - set executor to author if team.memberships.count() == 1: self.fields['executors'].initial = [user] else: # individual mode self.fields['executors'].queryset = User.objects.filter( pk=user.pk ) self.fields['status'].queryset = Status.objects.filter( creator=user, team__isnull=True ) self.fields['labels'].queryset = Label.objects.filter( creator=user, team__isnull=True ) # user is executor in individual mode self.fields['executors'].initial = [user] self.fields['executors'].widget.attrs['readonly'] = True