Создание поля множественного выбора с использованием отношения "многие ко многим
Я пытаюсь добавить поле под названием, interested_fields внутри моей модели personalInfo, из которого пользователи могут выбирать, а сами варианты приходят из объектов другой модели с помощью отношения ManyToMany между двумя моделями. Вот мои коды models.py (я упростил свою модель personalInfo, удалив некоторые другие поля, такие как имя, возраст и т.д., чтобы сделать ее более читабельной для вас):
class Field(models.Model):
id = models.AutoField(primary_key=True)
slug = models.CharField(max_length=16, default='default')
title = CharField(max_length=32)
class PersonalInfo(models.Model):
id = models.AutoField(primary_key=True)
interested_fields = models.ManyToManyField(Field, blank=True)
Затем я создал ModelForm следующим образом:
class InterestedFieldsForm(forms.ModelForm):
interested_fields = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=Field.objects.all(), required=False)
class Meta:
model = PersonalInfo
fields = ['interested_fields']
и создал функции get и post внутри моих представлений следующим образом:
class PersonalView(View):
template_name = 'reg/personal.html'
def get(self, request, *args, **kwargs):
context = {}
context['fields'] = Field.objects.all()
return render(request, self.template_name, context=context)
def post(self, request, *args, **kwargs):
user = request.user
if request.method == 'POST':
form = InterestedFieldsForm(request.POST)
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.save()
else:
form = InterestedFieldsForm()
return render(request, 'reg/done.html', context={'form': form})
и наконец в шаблоне, внутри формы я добавил этот цикл for:
{% for field in fields %}
<label class="containerq ant-col ant-col-md-6 ant-col-xs-8" >
<span>
<input type="checkbox" name="interested_fields" {% if field.slug in user.personalInfo.interested_fields %} checked="checked" {% endif %} value="{{field.title}}">
<span style="margin-left:7px" class="checkmark"></span>
</span>
<span>{{field.title}}</span>
</label>
{% endfor %}
когда я отправляю форму, она выдает мне эту ошибку: cannot unpack non-iterable Field object Я новичок в django, поэтому я действительно не знаю, что я делаю неправильно. спасибо за ваши ответы
Вы должны использовать ModelMultipleChoiceField
interested_fields = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Field.objects.all(), required=False).