如何在调用is_valid()方法后更改表单字段值?

时间:2013-11-24 17:49:48

标签: python django django-forms

如何在调用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))

2 个答案:

答案 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()