Django Form | Group Model | MultiSelect | Получение только одного значения из формы с помощью виджета MultiSelect
Я пытаюсь получить ввод от пользователя в шаблоне, я показываю список групп в шаблоне, доступных из модели Group в Django Auth Models и ожидаю несколько значений. Но он возвращает только одно значение даже при выборе нескольких вариантов
from django.contrib.auth.models import Group
class MyForm(forms.ModelForm):
the_choices = forms.ModelMultipleChoiceField(queryset=Group.objects.all(),
required=False,
widget=forms.CheckboxSelectMultiple)
class Meta:
model = Group
exclude = ['name', 'permissions']
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
ссылки на изображения ниже
Шаблон - Изображение формы ввода
обратитесь к изображению 2, я ожидаю 1 и 2 (предпочтительное имя группы) в консоли, но она возвращает только 2.
Если вы обращаетесь к request.POST.get('key') (или request.POST['key']), вы получаете только последнее значение, связанное с этим ключом.
Вы получаете доступ ко всем значениям с помощью метода .getlist(…) [Django-doc]:
print(request.POST.getlist('the_choices'))
Но обычно вы обрабатываете данные с помощью самой формы, поэтому:
form = MyForm(request.POST, request.FILES)
if form.is_valid():
print(form.cleaned_data['the_choices'])
Это также очистит данные и вернет объекты модели, а не их первичные ключи.
использовать getlist
https://docs.djangoproject.com/en/4.0/ref/request-response/#django.http.QueryDict.getlist
попробуйте это
the_choices = request.POST.getlist('the_choices')