2013-08-27 45 views
0

我有一个不保存到数据库的自定义表单。我没有收到任何错误,但这些值不保存到数据库中。有任何想法吗?表格不保存到数据库“通过”中间表

views.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) 

models.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) 

forms.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) 
+0

我不认为使用“through”时需要save_m2m。我必须手动保存指向中间表的指针,就像我试图在for循环中那样。我会尝试你的建议。 – nlr25

回答

1

我认为问题是与正从POST选项,使用 -

request.POST.getlist('relevantoption') 

request.POST.getlist('options') 

除了代替,为什么要在这里使用的形式单一选择题场,即使你还修改的选择,而不是使用form.save过。