2016-07-10 3 views
0

여러 개의 확인란이있는 폼을 만들려고합니다. 그러나 양식로드 괜찮지 만 데이터가 저장되지 않습니다. 나는 형식으로 아니라 관리자에 데이터를 입력하여 데이터를 저장할 수 있습니다. 양식을 is_valid()없이보기에 저장하면 양식에 입력 한 값이 아닌 기본값으로 저장됩니다. 또한 확인란을 선택하면 오류가 발생합니다. '항생제'는 기본 키에 대해 유효한 값이 아닙니다. 예를 들어 선택하면 항생제. 나는 장고를 잘못 했으니 까.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를 입력하는 것을 잊었습니다.3210
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)