Как отобразить только отмеченные флажки в 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()]

Вернуться на верх