Django.fun

Django ManyToMany MultipleChoice Field Edit Values Not Getting Checked

trying to show already selected items from Django many-to-many relationship in multiple choice field, but selected values aren't checked.

this is what i've tried so far

// models.py
class Person(models.Model):
    name = models.CharField(max_length = 100, help_text = _('name required! maximum 100 characters'))

class Team(models.Model):
    name = models.CharField(max_length = 100, help_text = _('name required! maximum 100 characters'))
    members = models.ManyToManyField(Member, related_name = 'teams')

// forms.py
class TeamForm(forms.ModelForm):
    teams = forms.MultipleChoiceField(choices = Team.objects.all(), widget = forms.CheckboxSelectMultiple)

    def __init__(self, *args, **kwargs):
        super(TeamForm, self).__init__(*args, **kwargs)

        if kwargs.get('instance'):
            initial = kwargs.setdefault('initial', {})
            initial['teams'] = [t for t in kwargs['instance'].teams.all()]

// views.py
class PersonEditView(View):
    team_form = TeamForm
    template_name = 'persons/edit.html'

    def get(self, request, person_id):
        """
        """
        person = get_object_or_404(Person, pk = person_id)

        return render(request, self.template_name, {
            'team_form': self.team_form(instance = member, initial = {'teams': person.teams.all()}),
        })

// edit.html template
<div class="">
    <p class="">Team Information</p>

    {% for team in team_form.teams.field.choices %}
    <div class="">
        <input id="{{ team.id }}" type="checkbox" value="{{ team.id }}" class="">
        <label for="{{ team.id }}" class="">{{ team.name|title }}</label>
    </div>
    {% endfor %}
</div>

how do i get to show selected teams checked in the list of teams when editing the details of a Person?

Tutorials

Современный Python: начинаем проект с pyenv и poetry

Настройка проекта Python — виртуальные среды и управление пакетами

Использование requests в Python — тайм-ауты, повторы, хуки

Понимание декораторов в Python

ProcessPoolExecutor в Python: полное руководство

map() против submit() с ProcessPoolExecutor в Python

Понимание атрибутов, словарей и слотов в Python

Полное руководство по slice в Python

Выпуск Django 4.0

Безопасное развертывание приложения Django с помощью Gunicorn, Nginx и HTTPS

Автоматический повтор невыполненных задач Celery

Django REST Framework и Elasticsearch

Докеризация Django с помощью Postgres, Gunicorn и Nginx

Асинхронные задачи с Django и Celery

Релизы безопасности Django: 3.2.4, 3.1.12 и 2.2.24

Выпуски исправлений ошибок Django: 3.2.3, 3.1.11 и 2.2.23

Эффективное использование сериализаторов Django REST Framework

Выпуски безопасности Django: 3.2.2, 3.1.10 и 2.2.22

Выпущенные релизы безопасности Django: 3.2.1, 3.1.9 и 2.2.21

Обработка периодических задач в Django с помощью Celery и Docker

View all tutorials →