gpt4 book ai didi

python - 如何仅在添加而不是编辑时验证 django 表单

转载 作者:行者123 更新时间:2023-12-01 06:14:30 26 4
gpt4 key购买 nike

如果我们正在编辑而不是添加新记录,我们如何使 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

此名称验证的目的是防止出现同名记录。但我发现,它也会在编辑时验证,因此我们无法编辑记录,因为它会说“同名记录已存在”。

实际上对于编辑来说,保存功能的页面参数不会是none,而是上一条记录,并且在保存新记录时也不会是none。但是我们如何在 clean_name 函数上读取这个参数,以便我们现在可以知道它是在编辑还是创建?

非常感谢!

最佳答案

在你的clean方法中,你可以使用self.initial来知道它是添加还是编辑。如果是编辑,self.initial不会为空。但是当它添加时,self.initial将是先前值的字典。

关于python - 如何仅在添加而不是编辑时验证 django 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4050965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com