2012-12-26 111 views
0

我有以下形式:清潔值

class SourceForm(forms.ModelForm): 
    class Meta: 
     model = Source 
     widgets = { 
      'category_re': forms.TextInput(), 
      'thumb_re': forms.TextInput(), 
      'movie_re': forms.TextInput() 
     } 

    def clean_url(self): 
     data = self.cleaned_data['url'] 
     return helpers.url_fix(data) 

和以下觀點:

def source_form(request, id): 
    source = get_object_or_404(Source, pk=id) 
    form = SourceForm(request.POST or None, instance=source) 

    if form.is_valid(): 
     form.save() 

    return render_to_response('source/form.html', {'form': form, 'source': source}, 
     context_instance=RequestContext(request)) 

和我有問題。表格中未顯示url字段的清除值。我只看到舊的,未修改的值,但後來我嘗試在模板中添加{{ form.cleaned_data }} - 它顯示正確的值。爲什麼發生這種事?我該如何解決它?

TIA!

+0

試試:'如果self.is_valid:'數據= self.cleaned_data [ 'URL']'clean_url' – karthikr

+0

THX的答案!它沒有效果。 – dizpers

回答

2

這是因爲您的form正在使用request.POST數據而不是cleaned_data。試試你的save()後重新分配你的form變量:

def source_form(request, id): 
    source = get_object_or_404(Source, pk=id) 
    form = SourceForm(request.POST or None, instance=source) 

    if form.is_valid(): 
     source = form.save() 
     form = SourceForm(instance=source) 

    return render_to_response('source/form.html', {'form': form, 'source': source}, 
     context_instance=RequestContext(request)) 
+0

thx很多!您的解決方案可以解決問題 – dizpers

+1

@dizpers此外,您不必將'source'傳遞到您的模板上下文,因爲您可以通過'form.instance' – mVChr