【发布时间】:2011-06-07 11:08:53
【问题描述】:
我有一个表单,我想用它来更新 MyModel 对象。在模型上有一个 unique_together 约束,fieldA 和 fieldB。在 clean 方法的表单中,我检查了这个唯一约束。
由于某些原因,我必须在更新中将 fieldA 显示为只读。因此 fieldA 没有通过。我的问题是,如果表单未通过验证,则会重新显示表单,但我丢失了 fieldA 中的值。
我尝试重置cleaned_data['fieldA'],但它不起作用。 知道要改变什么吗?
Forms.py
class MyModelUpdateForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(MyModelUpdateForm, self).__init__(*args, **kwargs)
self.fields['fieldA'].widget.attrs['readonly'] = True
self.fields['fieldA'].widget.attrs['disabled'] = True
def clean(self):
cleaned_data = self.cleaned_data
fieldA= self.instance.fieldA
fieldB = cleaned_data.get("fieldB")
if MyModel.objects.filter(fieldA=fieldA, fieldB=fieldB).count() > 0:
#try to reset fieldA, since it is not passed through, since it is disabled
cleaned_data['fieldA'] = fieldA.pk #does not work
raise forms.ValidationError('some unique validation error')
return cleaned_data
Views.py:
myModelobject = get_object_or_404(MyModel.objects, pk=mymodel_id)
if request.method == 'POST':
model_form = MyModelUpdateForm(request.POST, instance=myModelobject )
if model_form .is_valid():
....
【问题讨论】:
标签: django django-forms