ModelForm с обратным полем ManytoMany

У меня проблемы с получением ModelMultipleChoiceField для отображения начальных значений экземпляра модели. Мне не удалось найти никакой документации по этой области, а примеры, которые я читал, слишком запутывают. Django: ModelMultipleChoiceField не выбирает начальные варианты кажется похожим, но решение, которое было дано там, не является динамическим для экземпляра модели.

Вот мой случай (каждый пользователь базы данных подключен к одному или несколько проектов):

models.py

from django.contrib.auth.models import User
class Project(Model):
    users = ManyToManyField(User, related_name='projects', blank=True)

forms.py

from django.contrib.admin.widgets import FilteredSelectMultiple
class AssignProjectForm(ModelForm):
    class Meta:
        model = User
        fields = ('projects',)

    projects = ModelMultipleChoiceField(
        queryset=Project.objects.all(),
        required=False,
        widget=FilteredSelectMultiple('projects', False),
    )

views.py

def assign(request):
    if request.method == 'POST':
        form = AssignProjectForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/index/')
    else:
        form = AssignProjectForm(instance=request.user)

    return render_to_response('assign.html', {'form': form})

Форма, которую он возвращает, не выбирает связанные проекты экземпляра (это выглядит так: Django multi-select виджет? ). Кроме того, он не обновляет пользователя, делая выбор при сохранении формы.

Изменить: удалось решить эту проблему, используя подход здесь: http://code-blasphemies.blogspot.com/2009 /04/dynamically-created-modelmultiplechoice.html

6
задан Community 23 May 2017 в 12:15
поделиться