Как мы можем сделать так, чтобы форма 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
Целью этой проверки имени является предотвращение записей с одинаковым именем. Но я обнаружил, что это также подтверждает при редактировании, поэтому мы не можем редактировать записи, так как там будет сказано «записи с таким именем уже существуют».
На самом деле для редактирования, параметр страницы в функции сохранения не будет нулевым, а будет прежней записью, а при сохранении нового будет нулевым. Но как мы читаем этот параметр в функции clean_name, чтобы мы могли теперь редактировать или создавать его?
Большое спасибо!