MultiSelectField с виджетом select2 не работает должным образом для EDIT в Django
У меня есть форма, я пытаюсь понять ее поведение в Django.
Код формы выглядит следующим образом :
class RequestForm(forms.ModelForm):
TIMEPOINTS = (
("1M" , "1M"),
("2M" , "2M"),
("4M" , "4M"),
("6M" , "6M"),
("9M" , "9M"),
("1Y" , "1Y"),
("2Y" , "2Y"),
("3Y" , "3Y"),
("4Y" , "4Y"),
("5Y" , "5Y"),
)
timepoint = forms.MultipleChoiceField(choices=TIMEPOINTS)
def __init__(self, *args, **kwargs):
super(RequestForm, self).__init__(*args, **kwargs)
self.fields['timepoint'].required = False
class Meta:
model = Request
fields = '__all__'
exclude = ('request_task_id', 'request_status',)
widgets = {
'timepoint': forms.Select(attrs={'class': 'select2 timepoint form-control'})
}
У меня классический взгляд
@login_required
def edit_request(request, pk):
data_request = Request.objects.get(id=pk)
form = RequestForm(instance=data_request)
if request.method == 'POST':
form = RequestForm(request.POST, instance=data_request)
if form.is_valid():
new_req = form.save(commit=False)
new_req.created_by = request.user
new_req.save()
messages.success(request, ' Request Edited Successfully')
return redirect("data-requests")
else:
form = RequestForm(instance=data_request)
context = {
'form': form,
'data_request' : data_request,
}
return render(request, 'extractor/datarequest_edit.html', context)
Проблема с этим кодом и поведенческой шляпой, которую я не понимаю, заключается в следующем :
1- Форма работает нормально, когда я выбираю много временных точек в форме, она сохраняется как поле символов
2- Когда я хочу редактировать, я не могу найти свои опции в поле
.
3- Когда я выбираю только один вариант, он сохраняется и отображается
4- Когда я выбираю более одного варианта, в форме (select2) ничего не отображается, но база данных показывает, что форма сохранена и данные сохранены
Я не уверен, что я здесь упускаю
Любая помощь более чем приветствуется
Спасибо
Я решил проблему с помощью лучшей структуры моего кода, я переключил все в другие модели как отношения ManyToMany и теперь все работает нормально