Django独特的模型字段验证形式 [英] Django unique model fields validation in form

查看:145
本文介绍了Django独特的模型字段验证形式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个模型有几个独特的领域,我正在为它写一个表格。我发现一些参考$ {code> [validate_unique] [1] 方法,当您调用它时,应检查字段的唯一性,但我的表单 .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 ModelForms, which automatically does several model validation steps.

这篇关于Django独特的模型字段验证形式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆