Я использую пользовательский 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>