Элементы, не выбранные при использовании настраиваемого MultipleChoiceField - PullRequest
0 голосов
/ 18 июня 2019

Я использую пользовательский MultipleChoiceField, чтобы отображать полные имена пользователей вместо их логинов.

Я настроил способ отображения элементов с помощью атрибута choices MultipleChoiceField:

assignees = MultipleChoiceField(choices=[(user.id, user.get_full_name() or user.username) for user in User.objects.all()])

Имена пользователей отображаются корректно, но проблема заключается в в том, что при выпуске (т. Е. Когда Форме дается экземпляр Story с существующими назначенными пользователями), соответствующие <option> не являютсяselected ...

Я пытался использовать ключевое слово initial, но это не помогло.

self.fields['assignees'] = MultipleChoiceField(choices=[(user.id, user.get_full_name() or user.username) for user in User.objects.all()],
                                    initial=[user.id for user in self.instance.assignees])

models.py

class Story(BaseModel):
    assignees = models.ManyToManyField(User, 
                                       blank=True,
                                       related_name="assigned")

forms.py

class StoryForm(forms.ModelForm):
    assignees = MultipleChoiceField(choices=[(user.id, user.get_full_name() or user.username) for user in User.objects.all()])

views.py

def story_edit(request, story_id):
    if request.method == 'POST':
        story = get_object_or_404(Story, id=story_id)
        form = StoryForm(request.POST, instance=story)
        if form.is_valid():
            form.save()
    else:
        story = get_object_or_404(Story, id=story_id)
        form = StoryForm(instance=story)

    return render(request, 'story_form.html', {'form': form})

story_form.html

<p>
    {{ form.assignees.errors }}
    {{ form.assignees }}
</p>
...