📜  默认 - Django 内置字段验证(1)

📅  最后修改于: 2023-12-03 15:12:57.641000             🧑  作者: Mango

默认 - Django 内置字段验证

Django 提供了一系列内置字段,这些字段都带有默认的验证逻辑来确保数据的有效性。在整个应用程序的开发过程中,了解这些字段的验证方式是非常重要的。

本篇文章将介绍 Django 内置字段的默认验证方式以及如何自定义这些验证逻辑。

Django 内置字段的默认验证

Django 内置字段的验证逻辑基于 Python 语言的验证规则。下面是一些常见的内置字段和它们的默认验证规则:

  • CharField

    CharField 字段用于存储字符数据,例如字符串。它的默认验证规则是该字段不能为空值,并且字符串长度不能超过最大长度。可以通过设置 max_length 参数来自定义最大长度。

    class MyModel(models.Model):
        name = models.CharField(max_length=50)
    
  • IntegerField

    IntegerField 字段用于存储整数数据。它的默认验证规则是该字段不能为空值,并且必须为整数。可以通过设置 max_value 和 min_value 参数来自定义最大值和最小值。

    class MyModel(models.Model):
        age = models.IntegerField()
    
  • DecimalField

    DecimalField 字段用于存储小数数据。它的默认验证规则是该字段不能为空值,并且必须为小数。可以通过设置 max_digits 和 decimal_places 参数来自定义最大位数和小数点后的位数。

    class MyModel(models.Model):
        price = models.DecimalField(max_digits=6, decimal_places=2)
    
  • DateField

    DateField 字段用于存储日期数据。它的默认验证规则是该字段不能为空值,并且必须为日期格式。可以通过设置 auto_now 或 auto_now_add 参数来自动设置为当前日期。

    class MyModel(models.Model):
        date = models.DateField(auto_now=True)
    
  • ForeignKey

    ForeignKey 字段用于表示外键关系,通常用于关联两个模型。它的默认验证规则是该字段不能为空值,并且必须为关联模型的主键。

    class Author(models.Model):
        name = models.CharField(max_length=50)
    
    class Book(models.Model):
        title = models.CharField(max_length=50)
        author = models.ForeignKey(Author, on_delete=models.CASCADE)
    
自定义字段验证

在某些情况下,需要自定义字段的验证逻辑,例如检查输入数据是否符合业务规则。Django 提供了多种方式来自定义字段验证逻辑:

  1. 通过继承字段来自定义验证逻辑。

    class MyCharField(models.CharField):
        def validate(self, value):
            super().validate(value)
            if not value.startswith('prefix'):
                raise ValidationError('Must start with prefix')
    
    class MyModel(models.Model):
        name = MyCharField(max_length=50)
    
  2. 通过编写自定义验证函数来自定义验证逻辑。

    def validate_name(value):
        if not value.startswith('prefix'):
            raise ValidationError('Must start with prefix')
    
    class MyModel(models.Model):
        name = models.CharField(max_length=50, validators=[validate_name])
    

无论采用何种方式,都需要确保自定义验证逻辑能够正确地处理输入数据,并且在不满足验证规则时引发 ValidationError 异常。

总结

Django 内置字段提供了默认的验证逻辑,确保数据的有效性。针对某些特殊情况,可以通过继承字段或编写自定义验证函数来自定义字段的验证逻辑。了解这些字段的默认验证方式和自定义验证方式是 Django 应用程序开发的重要部分之一。