Как отобразить только отмеченные флажки в forms.CheckboxSelectMultiple?
В CheckboxSelectMultiple я получаю список всех чекбоксов (отмеченных и не отмеченных), но мне нужно получить только список отмеченных чекбоксов. Как это сделать?
У меня есть form.py: class ProfileForm(forms.ModelForm): class Meta : fields = [ 'categories', ] виджеты ={'categories': forms.CheckboxSelectMultiple( attrs={ "class": "column- checkbox"})}
models.py:
class Profile(models.Model):
categories = models.ManyToManyField(Category, max_length=50, blank=True,
verbose_name='Category')
Измените атрибут поля choice или queryset для динамического ограничения выбора в зависимости от текущего объекта.
Вы можете изменить choices в представлении:
# views.py
form = ProfileForm(instance=profile)
form.fields['categories'].choices = [(category.pk, category.name) for category in profile.categories.all()]
Или вы можете изменить queryset в представлении:
# views.py
form = ProfileForm(instance=profile)
form.fields['categories'].queryset = profile.categories.all()
Или вы делаете это в методе __init__() формы:
# models.py
class ProfileForm(forms.ModelForm):
...
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.instance.pk:
self.fields['categories'].queryset = self.instance.categories.all()
# Or alternatively using choices
#self.fields['categories'].choices = [(category.pk, category.name) for category in self.instance.categories.all()]