0

我有一个未保存到数据库的自定义表单。我没有收到任何错误,但值没有保存到数据库中。有任何想法吗?

视图.py

def diseasestateoption(request, disease_id, state_id):

    state = get_object_or_404(State, pk=state_id)
    disease = get_object_or_404(Disease, pk=disease_id)


    if request.method == "POST":
        form = UpdateStateWithOptionsForm(request.POST, instance=state)

        if form.is_valid(): 
           for option_id in request.POST.getlist('options'):
               state_option = StateOption.objects.create(partstate=state, partoption_id=int(option_id))
               state_option.save()
        return HttpResponseRedirect(reverse('success'))

else:
    form = UpdateStateWithOptionsForm(instance=state)

模型.py

class Option(models.Model):
        relevantdisease = models.ForeignKey(Disease)
        option = models.CharField(max_length=300)

class State(models.Model):
       state = models.CharField(max_length=300, verbose_name='state')
       relevantdisease = models.ForeignKey(Disease, verbose_name="disease")
       relevantoption = models.ManyToManyField(Option, through='StateOption')

class StateOption(models.Model):
       parttstate = models.ForeignKey(State)
       partoption = models.ForeignKey(Option)

表格.py

class UpdateStateWithOptionsForm(forms.ModelForm):
    class Meta:
       model = State
       exclude = ['state', 'relevantdisease']

    def __init__(self, *args, **kwargs):
       super(UpdateStateWithOptionsForm, self).__init__(*args, **kwargs)
       self.fields['relevantoption']=forms.ModelMultipleChoiceField(queryset=Option.objects.all(),required=True, widget=forms.CheckboxSelectMultiple)
4

1 回答 1

1

我认为问题在于从 POST 获取选项,使用-

request.POST.getlist('relevantoption')

代替

request.POST.getlist('options')

另外,为什么要在此处将表单用于单个多项选择字段,即使您也在修改选择而不使用 form.save。

于 2013-08-27T17:50:43.543 回答