У меня проблемы с получением 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