如何在调用is_valid()
方法后更改表单字段值?
我在使用u_id
验证数据后尝试更改字段form.is_valid
(这是必需的)。我可以更改数据,甚至可以在HttpResponse
中显示,但我无法将其写入Postgresql DB。有什么想法吗?
class ProductForm(forms.ModelForm):
class Meta:
model = Product
class Product(models.Model):
p_name = models.CharField(max_length=30)
u_id = models.CharField(max_length=80)
def uploadImage(request):
if request.method == 'POST':
form1 = ProductForm(request.POST, prefix="product")
if form.is_valid() and form1.is_valid():
form1.cleaned_data['uid']='12134324231'
form1.save()
return HttpResponse(form1.cleaned_data['p_name'])
return render_to_response('upload.html', {'form': form, 'form1': form1}, RequestContext(request))
答案 0 :(得分:6)
commit=False
Save the model form,然后在保存到数据库之前修改实例。
if form.is_valid() and form1.is_valid():
instance = form1.save(commit=False)
instance.uid = '12134324231'
instance.save()
如果form1
具有任意多对多关系,则必须调用save_m2m
方法来保存多对多表单数据。有关详细信息,请参阅文档。
答案 1 :(得分:1)
来自Overriding clean() on a ModelFormSet。
另请注意,到达此步骤时,已为每个表单创建了单个模型实例。 修改form.cleaned_data中的值不足以影响保存的值。如果要修改ModelFormSet.clean()中的值,则必须修改form.instance :
from django.forms import BaseModelFormSet
class MyModelFormSet(BaseModelFormSet):
def clean(self):
super(MyModelFormSet, self).clean()
for form in self.forms:
name = form.cleaned_data['name'].upper()
form.cleaned_data['name'] = name
# update the instance value.
form.instance.name = name
所以你应该做的是:
if form.is_valid() and form1.is_valid():
form1.instance.uid ='12134324231'
form1.save()