Django独特的模型字段验证形式 [英] Django unique model fields validation in form
问题描述
.is_valid()
总是返回 True
。 我的测试用例:
class ServerFormTest(TestCase):
def setUp(self):
self.server = Server.objects.create(host =127.0 $ 0
def test_unique_name(self)
form = ServerForm({
'name':'localhost',
'主机':'127.0.0.1'
})
self.assertFalse(form.is_valid())
和我的表单:
class ServerForm(forms.ModelForm):
class Meta:
model = Server
fields =('name','host')
def clean(self):
self.validate_unique()
return self.cleaned_data
服务器模型:
class Server(models.Model):
host = models.GenericIPAddressField(blank = False, null = False,unique = True)
name = models.CharField(blank = False,null = False,unique = True,max_length = 55)
validate_unique 是一个模型
方法。
运行超类 clean
方法应该考虑到一个 ModelForm
的模型唯一性检查。
class MyModelForm(forms.ModelForm):
def clean(self):
cleaning_data = super(MyModelForm,self)。 clean()
#其他清理
返回clean_data
有一个< a href =https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding -the-clean-methodrel =nofollow>警告在django文档上具体关于覆盖 ModelForm
的清理,它自动执行几个模型验证步骤。
I have a model with a few unique fields and I'm writing a form for it. I found some reference to the [validate_unique][1]
method that should check for uniqueness on fields when you call it but my form .is_valid()
always returns True
.
My testcase:
class ServerFormTest( TestCase ):
def setUp( self ):
self.server = Server.objects.create( host = "127.0.0.1", name = "localhost" )
def test_unique_name(self):
form = ServerForm({
'name': 'localhost',
'host': '127.0.0.1'
})
self.assertFalse( form.is_valid( ) )
and my form:
class ServerForm( forms.ModelForm ):
class Meta:
model = Server
fields = ('name', 'host')
def clean( self ):
self.validate_unique()
return self.cleaned_data
server model:
class Server( models.Model ):
host = models.GenericIPAddressField( blank = False, null = False, unique = True )
name = models.CharField( blank = False, null = False, unique = True, max_length = 55 )
validate_unique is a Model
method.
Running the superclass clean
method should take care of model uniqueness checks given a ModelForm
.
class MyModelForm(forms.ModelForm):
def clean(self):
cleaned_data = super(MyModelForm, self).clean()
# additional cleaning here
return cleaned_data
There is a warning on the django docs specifically about overriding clean on ModelForm
s, which automatically does several model validation steps.
这篇关于Django独特的模型字段验证形式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!