django -select2 сохранить множественный выбор - PullRequest
0 голосов
/ 09 мая 2020

Как правильно сохранять несколько выбранных элементов, выбранных из Django -select2 Widget?

это моя модель

class Rgn_Details(models.Model):

    request_no = models.ForeignKey(Request_Flow, on_delete=models.CASCADE, related_name='request_ref')
    region = models.ForeignKey(Region, on_delete=models.PROTECT, related_name='regn')

    class Meta:
        ordering= ['-region']

    def __str__(self):
        return self.region

У меня есть такая модельная форма.

class RegionForm(forms.ModelForm):
    region = forms.ModelMultipleChoiceField(queryset=Region.objects.all().order_by('region_id'),
                                            widget=Select2MultipleWidget)

    class Meta:
        model = Rgn_Details
        fields = ['region']

это мое мнение

def create(request):

    if  request.method == 'POST':
        form1 = RequestForm(request.POST, prefix="form1")
        form2 = RegionForm(request.POST, prefix="form2")


        if form1.is_valid() and form2.is_valid():
            req = form1.save()
            region = form2.save(commit=False)
            region.request_no = req 
            region.save()

если я попробую region.save() он не работает, хотя проверка формы не имеет ошибок ...

Я получаю

Cannot insert the value NULL into column 'region_id', table 'rgn_details'

Я что-то не так делаю с методом сохранения, когда у вас есть несколько вариантов выбора с помощью виджета Django -Select2?

1 Ответ

0 голосов
/ 12 мая 2020

Это решение, которое я использовал для хранения нескольких данных, выбранных в форме ....

не уверен, что какое-либо встроенное решение доступно, но это работает для меня ..

for _region in form2.cleaned_data['region']:
            region = Rgn_Details(region=_region, request_no=req)
            region.save()

Поскольку я не использую функцию ModelForm, я изменил свою форму с ModelForm на обычную форму

class RegionForm(forms.Form):
    region = forms.ModelMultipleChoiceField(queryset=Region.objects.all().order_by('region_id'),
                                            widget=Select2MultipleWidget)

    class Meta:
        #model = Rgn_Details
        fields = ['region']
...