Поле флажка в формах django показывает ошибку
На основе моего проекта django я хочу добавить несколько пользователей в группу, и я пытаюсь сделать это с помощью формы. Но когда я пытаюсь добавить выбор через виджет CheckBoxSelectMultiple(), он не работает так, как ожидалось.
файл models.py
from django.db import models
from members.models import User
from django.contrib.auth.models import Group
class Sprint(models.Model):
status_choice = [('Working','Working'), ('Closed','Closed')]
sprint_name = models.CharField(max_length=180)
sprint_created = models.DateTimeField(auto_now= True)
lead = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='team_lead')
sprint_members = models.ForeignKey(Group, on_delete=models.CASCADE, related_name = "member")
sprint_period = models.PositiveIntegerField()
sprint_status = models.CharField(max_length=10, choices=status_choice, default='Working')
файлforms.py
from django import forms
from .models import Sprint
from members.models import User
from django.core.exceptions import ValidationError
from django.contrib.auth.models import Group
class SprintForm(forms.Form):
sprint_name = forms.CharField()
sprint_period = forms.IntegerField(label="Sprint period (in days)", min_value=7)
lead = forms.ModelChoiceField(queryset= User.objects.filter(role = 'Developer'),
label="Team Lead")
sprint_members = forms.ModelChoiceField(queryset= User.objects.filter(role =
'Developer'), widget= forms.CheckboxSelectMultiple(), label="Team members")
# class Meta:
# model = Sprint
# fields = ['sprint_name', 'lead', 'sprint_period', 'sprint_members']
def clean(self):
cleaned_data = super().clean()
lead = cleaned_data.get('lead')
team = cleaned_data.get('sprint_members')
if team and lead:
if lead in team:
raise ValidationError('Team lead cant be in team')
def save(self):
team = Group.objects.get_or_create(name=f'team{self.cleaned_data["sprint_name"]}')[0]
for team_member in self.cleaned_data['sprint_members']:
team.user_set.add(team_member)
Sprint.objects.update_or_create(
sprint_name=self.cleaned_data["sprint_name"],
lead=self.cleaned_data["lead"],
sprint_period=self.cleaned_data["sprint_period"],
_members=team
)
файлviews.py
class SprintCreationView(generic.FormView):
model = Sprint
template_name = 'sprint_creation.html'
form_class = SprintForm
def form_valid(self, form):
form.save()
return super().form_valid(form)
При попытке отправить форму выдается сообщение "Выберите правильный вариант. Этот выбор не является одним из доступных вариантов."