2011-05-28 104 views
0

我正在嘗試在窗體上進行自定義驗證。但是,clean_方法不起作用(無論我嘗試什麼)。這是我目前有 -驗證ModelForm

from django.forms import ModelForm 
from django import forms 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    avatar = models.ImageField(upload_to='images/%Y/%m/%d', blank=True) 

class ProfilePictureForm(ModelForm): 
    class Meta: 
     model = UserProfile 
     fields = ('avatar',) 

    def clean_avatar(self): 
     try: 
      raise # this is just to see if the clean_ is working 
     except: 
      raise  

而且在views -

def getting_started_pic(request): 
    if request.method == 'POST': 
     profile.avatar = request.FILES['avatar'] 
     profile.save() 
     return render_to_response (...) 

那我爲了得到clean_avatar法「工作」失蹤? (目前,它好像不在那裏)。謝謝。

回答

1

我在任何地方都看不到您的ProfilePictureForm實例?我會假設配置文件是你的實例。如果是這樣的話,你需要調用is_valid()在您的ModelForm實例爲您clean_avatar到被調用:

def getting_started_pic(request): 
    if request.method == 'POST': 
    profile.avatar = request.FILES['avatar'] 
    if profile.is_valid(): 
     profile.save() 
    return render_to_response (...) 
0

常用模型形式的工作流程是::

def some_view(request): 
    profile = request.user.profile # or some other way to get user's profile 
    if request.method == 'POST': 
     form = ProfilePictureForm(request.POST, request.FILES, instance=profile)  
    else: 
     form = ProfilePictureForm(instance=profile) 
    if form.is_valid(): 
     form.save() 
     # Redirect somewhere 
    # Return failed form