0
我想使用具有自定义窗体的模型窗体集。我对GET使用了不同的视图,对POST函数使用了不同的视图,导致我的html页面由三个不同的模型构成。我的模型是一个模型Formset验证错误
class Image(models.Model):
customer = models.ForeignKey(Customer)
doctor = models.ForeignKey(Doctor)
date = models.DateField()
desc = models.CharField(max_length=30)
type = models.CharField(choices=TITLE,max_length=20)
image = models.ImageField(upload_to='/pictures/', verbose_name='Image')
XRAY=[
('---------','---------'),
('PA Ceph', 'PA Ceph'),
('Lateral Ceph', 'Lateral Ceph'),
('Panoramic', 'Panoramic'),
]
class XrayImageForm(ModelForm):
desc = forms.ChoiceField(choices=XRAY,required=True, widget=Select(attrs={"class":"form-control input-sm"}))
class Meta:
model = Image
exclude = ('customer', 'date','type', 'doctor',)
widgets = {
'desc':Select(attrs={'class':'form-control input-sm'}),
'date': TextInput(attrs={'class':'form-control input-sm datepicker input-append date',
'readonly':''}),
}
def save(self, commit=True):
model = super(XrayImageForm, self).save(commit=False)
model.desc = self.cleaned_data['desc'];
if commit:
model.save()
return model
class InternalImageForm(ModelForm):
desc = form.ChoiceField(....) # I have to do this cause different ModelForm has different choices in the desc field
class Meta:
model = Image
exclude = ('customer',)
我GET观点如下
def images(request, customer_id):
images = Image.objects.all().order_by('date')
pictures = {}
for image in images:
date = image.date.stformat("%d/%M/%Y")
if not pictures.has_key(date):
pictures[date] = {image.title:[image,]}
else:
if pictures[date].has_key(image.title):
pictures[date][image.title].append(image)
else:
pictures[date] = {image.title:[image,]}
xray_formset = modelformset_factory(Image, form=XrayImageForm,extra=4)
xray_formset(queryset=Image.objects.none())
internal_form = InternalImageForm()
external_form = ExternalImageForm()
args = dict(pictures=pictures, xray_formset=xray_formset, internal_form=internal_form, external_form=external_form, customer_id=customer_id)
return render_to_response('customer/images.html', args, context_instance=RequestContext(request))
我希望让他们按日期过滤,并通过一个标题中各个日期(不同的图像可能有相同的标题,和同日)
我的帖子观点
def upload_xray(request, customer_id):
customer = Customer.objects.get(pk=customer_id)
if request.method == 'POST':
XrayFormSet = modelformset_factory(Image, form=XrayImageForm, extra=4)
xray_formset = XrayFormSet(request.POST, request.FILES)
print xray_formset
return redirect('customer-images', customer_id=customer_id)
但是当我发布的数据,我收到了
ValidationError
Exception Value:[u'ManagementForm data is missing or has been tampered with']
我没有做任何实际的保存,只是想看看它是否工作。此外,所有字段都是必填字段,但我并未填充页面中的所有字段(假设用户可以上传4张图片,但他可能不想)。希望我有点感觉...为什么是这个错误?
谢谢你的作品。但它现在不会验证。我呈现5个表单formset,但只有一个被使用时,其他人不会验证。这是假定的行为? – Apostolos
如果发布的数据与初始数据匹配,那么Django将允许空表单。如果空表单的值发生了变化,那么Django会验证它们。 – Alasdair
初始值为空仍然不会让我 – Apostolos