2016-07-10 28 views
0

Ich versuche ein Formular mit mehreren Kontrollkästchen zu erstellen. Das Formular wird jedoch ordnungsgemäß geladen, aber die Daten werden nicht gespeichert. Ich kann Daten speichern, indem ich Daten in Admin, aber nicht in Form eingibt. Wenn ich das Formular in Ansichten ohne is_valid() speichere, dann speichert das Formular mit den Standardwerten und nicht mit denen, die ich in das Formular eingegeben habe. Auch Checkbox-Werte erzeugen einen Fehler: "Antibiotika" ist kein gültiger Wert für einen Primärschlüssel, sagen wir, wenn ich wähle Antibiotika. Ich bin neu bei Django, bitte entschuldigt, wenn ich die Grundlagen falsch mache.Rendern und Speichern von Django-Formularen

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) 

Antwort

0

Ich bin nicht sicher, dass diese Antwort helfen, aber von Codes, die Sie geschrieben haben, haben Sie vergessen, die Methode request.method vor der Verarbeitung des Formulars in der Datei views.py

einzugeben
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)