2016-07-10 12 views
0

複数のチェックボックスがあるフォームを作成しようとしています。しかし、フォームは正常にロードされますが、データは保存されません。データは管理者に入力して保存できますが、フォームには保存できません。私がis_valid()のないビューでフォームを保存すると、formに入力したものではなく、デフォルト値でフォームが保存されます。また、チェックボックスの値はエラーを発生させます: 'antibiotics'はプライマリキーの有効な値ではありません抗生物質。私はdjangoに新しいので、私は基本が間違っている場合は言い訳をしてください。Djangoフォームのレンダリングと保存

models.py:

class Taken24h(models.Model): 
    CHOICES_EATEN = (
     ('antibiotics', 'Antibiotics'), 
     ('steroids', 'Steroids'), 
     ... 
    ) 
    val = models.CharField(max_length=40,choices=CHOICES_EATEN,blank=True,null=True) 


    class BloodDonation(models.Model): 
     name = models.CharField(max_length=100,blank=False,null=True) 
     date_of_birth = models.DateField(null=True,blank=False) 
     nationality = models.CharField(max_length=50,blank=False,null=True) 
     ... 
     taken_following_in_last_24_hrs = models.ManyToManyField(Taken24h,blank=True) 

forms.py:

class BloodDonationForm(forms.ModelForm): 
     name = forms.CharField(widget=forms.TextInput,required=True) 
     date_of_birth = forms.CharField(widget=forms.DateInput,required=True) 
     nationality = forms.CharField() 
    ... 


     taken_following_in_last_24_hrs = forms.ModelMultipleChoiceField(queryset=Taken24h.objects.all(), 
widget=forms.CheckboxSelectMultiple,required=False) 
    ) 

     class Meta: 
      model = BloodDonation 
      fields = '__all__' 
     def __init__(self,*args,**kwargs): 
      super(BloodDonationForm, self).__init__(*args, **kwargs) 
      self.fields['taken_following_in_last_24_hrs'].choices = Taken24h.CHOICES_EATEN 

views.py:

def forms(request): 
    form = BloodDonationForm(request.POST or None)  
    if form.is_valid(): 
     form.save(commit=True)   
    else: 
     print("Invalid")  
    data = { 
    'form':form, 
    } 
    return render(request,"forms.html",data) 

答えて

0

私はこの答えは助けることをわからないんだけど、からあなたが書いたコードは、あなたはviews.pyファイルのフォームを処理する前にrequest.methodを入力するのを忘れた

def forms(request): 
    if request.method == 'POST': 
     form = BloodDonationForm(request.POST or None)  
     if form.is_valid(): 
      form.save(commit=True)   
     else: 
      print("Invalid") 
    else: 
     form = BloodDonationForm() 

    data = { 
     'form':form, 
    } 

    return render(request,"forms.html", data) 
関連する問題