Django ValueError: слишком много значений для распаковки (ожидалось 2)
Я новичок в Django и мне нужна помощь в моем приложении django 2.2.
У меня есть виртуальные машины и расписания с отношением manytomany. Я пытаюсь создать новое расписание, но у меня возникает ошибка. В основном в моей форме создания расписания в столбце я отображаю список виртуальных машин. Таким образом, мы можем выбрать, какой машине назначить расписание. Но я хотел бы отобразить в другом столбце существующие расписания, например так (Изображение) :https://ibb.co/2dvTzXc. Я попробовал с сырым запросом, он отображается хорошо, но когда я попытался отправить свою форму, произошла ошибка:My traceback = https://dpaste.org/p9SQ Мои модели = https://dpaste.org/FwFe Мой код = https://dpaste.org/ZsNZ
# MY TEMPLATE
{% for i in form.vms.field.choices %}
<tr class="clickable_vm">
<td>
<label for="{{ i.0 }}">
<input type="checkbox" name="vms" value="{{ i.0 }}" class="displaynone" id="{{ i.0 }}">{{ i.1 }}
</label>
</td>
<td class="schedule-name">{% for j in i.2 %}{{ j }}<br/>{% endfor %}</td>
</tr>
{% endfor %}
# MY RAW QUERY
cursor = connection.cursor()
cursor.execute(
' SELECT vmware_virtualmachine.id,'
' vmware_virtualmachine.name,'
' group_concat( appli_vmschedule.schedule) as "schedule"'
' FROM vmware_virtualmachine'
' LEFT OUTER JOIN appli_vmschedule_vms'
' ON (vmware_virtualmachine.id = appli_vmschedule_vms.virtualmachine_id)'
' LEFT OUTER JOIN appli_vmschedule'
' ON (appli_vmschedule_vms.vmschedule_id = appli_vmschedule.id)'
' group by vmware_virtualmachine.name')
vm_sche_list = cursor.fetchall()
vm_sche_list = [list(ele) for ele in vm_sche_list]
for i in vm_sche_list:
if i[2] is None:
i[2] = ''
else:
i[2] = list(i[2].split(','))
# MY CLASS form
vms = MultipleChoiceField(required=True,
widget=forms.SelectMultiple(attrs={
'class': 'form-control form-form shadow-none '
'td-margin-bottom-5 textarea_custom',
'placeholder': 'Name'}),
choices=vm_sche_list,
)
есть ли другой способ сделать то, что я хочу с помощью queryset ? ИЛИ решение для моего фактического кода?
Я нашел решение, я поместил SQL запрос в мой views vm.py. Затем я преобразовал результат запроса в словарь, по которому я выполнял итерацию.
вот так :
mydict = dict()
for ele in vm_sche_list:
mydict[ele[0]] = [ele[1], ele[2]]
for i, j in mydict.items():
...