我正在尝试创建一个包含多个复选框的表单。但是,表单加载正常,但数据未保存。我可以通过在admin中输入数据而不是在表单中输入数据来保存数据。如果我在没有is_valid()
的视图中保存表单,那么表单保存默认值而不是我在表单中输入的那些。复选框值也会引发错误:'antibiotics'不是主键的有效值,比如说,如果我选择抗生素。我是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 :(得分: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)