我們如何才能讓django表單無法驗證是否正在編輯,而不是添加新記錄。代碼如下:如何僅在添加未編輯時驗證django表單
class PageForm(forms.Form):
name = forms.CharField(max_length=100,widget=forms.TextInput(attrs={'class':'textInput'}))
description = forms.CharField(max_length=300, required=False,widget=forms.TextInput(attrs={'class':'textInput'}))
body = forms.CharField(widget=forms.Textarea)
template = forms.CharField(max_length=30,widget=forms.TextInput(attrs={'class':'textInput'}))
navbar = forms.BooleanField(required=False, widget=forms.Select(choices=(('True','True'),
('False', 'False'))))
publish = forms.BooleanField(widget=forms.Select(choices=(('Published','Publish Now'),
('Private','Private'),
('Draft','Draft'))))
def save(self, page=None, commit=True):
data = self.cleaned_data
if not page:
page = models.Page(key_name=data['name'].replace(' ','-'))
page.name = data['name']
page.description = data['description']
page.body = data['body']
page.template = data['template']
page.publish = data['publish']
if commit: page.put()
return page
# prevent the same page 's name
def clean_name(self):
name = self.cleaned_data['name']
query = models.Page.all(keys_only=True)
query.filter('name = ', name)
page = query.get()
if page:
raise forms.ValidationError('Page name "%s" was already used before' % name)
return name
此名稱驗證的目的是防止具有相同名稱的記錄。但我發現,它也在編輯時生效,所以我們無法編輯記錄,因爲它會說'已存在相同名稱的記錄'。
實際上,對於編輯,保存功能頁param不會是沒有,但prev記錄,而不是保存一個新的。但是我們如何讀取這個參數,在clean_name函數中,我們現在可以判斷它是編輯還是創建?
非常感謝!
在clean_name功能
你沒有使用ModelForm從頁面模型生成表單的原因?使用key_name作爲獨特的SlugField – sunn0 2010-10-29 12:30:05