Как заставить Django форму множественного выбора передавать выбранные элементы в виде списка?
У меня есть приложение Django, где я использую мультиселект с динамическим выбором, связанным с вошедшим пользователем, но когда я пытаюсь отправить форму, я продолжаю получать следующее сообщение об ошибке:
"TypeError at /masstext.html Поле 'id' ожидало число, но получило <QueryDict: {'customers': ['customers'], 'textmessage': ['test'], 'csrfmiddlewaretoken': ['FNawscd4CXqtDWIUrq0Kolq3x6R699lStaykXwxDbtqciJortBm0pTfPWSvvjW7L']}>"
>Я бы хотел, чтобы при отправке формы пользователем создавался новый экземпляр модели с выбранными клиентами и введенным сообщением в качестве полей. Я не понимаю, почему я не получаю список выбранных клиентов из мультиселекта, возвращаемого в список, а получаю пустой список.
Код ниже:
<class Masstext(models.Model):
profile = models.ForeignKey(Profile, on_delete = models.CASCADE)
message = models.CharField(max_length = 500, null = True)
customers = models.CharField(max_length = 1000, null = True)
Модель:
Форма:
class Textform(ModelForm):
def __init__(self, user, *args, **kwargs):
super(Textform, self).__init__(*args, **kwargs)
self.fields['customers'] = forms.ModelChoiceField(
queryset = Customers.objects.filter(facility__profile__email = user))
class Meta:
model = Masstext
fields = ['customers','message']
Вид:
@login_required(login_url="login/") def load_customers(request, *args,
**kwargs):
msg = ''
if request.method == 'POST':
user = request.user
form = Textform(request.POST)
if form.is_valid():
form.save()
else:
msg = "Fields are not valid"
else:
form = Textform(request.user)
context = {'form': form}
return render(request,'home/masstext.html',context)
Шаблон:
<form action="masstext.html" method="POST">
{% csrf_token %}
<!-- Form -->
<label for="customers">Select Customers:</label>
<br>
<select name="customers" style="height: 250pt" multiple>
{% for customer in form.customers %}
<option value='{{customer.id}}'{{customer}}></option>
{% endfor %}
</select>
<br><br>
<textarea name="textmessage" rows="4" cols="75" placeholder="Write the text message you'd like to send to all tenants selected above here...">{{customer.message}}</textarea>
<br><br>
<input type="submit" value="Submit">
</form>
<!-- End of Form -->