深度阅读

How to add validation to a Django model field?

作者
作者
2023年08月22日
更新时间
20.57 分钟
阅读时间
0
阅读量

To add validation to a Django model field, you can use the validators argument of the field definition. The validators argument takes a list of callables and Django will run each validator on the field when you call full_clean() or validate() on the model instance.

Here’s an example of how to add a validator to a model field:

from django.core.exceptions import ValidationError
from django.db import models

def validate_even(value):
    if value % 2 != 0:
        raise ValidationError(
            '%(value)s is not an even number',
            params={'value': value},
        )

class MyModel(models.Model):
    my_field = models.IntegerField(validators=[validate_even])

In this example, we define a validator function validate_even() that checks if the field value is even. We then pass this validator function to the validators argument of the IntegerField definition for the my_field field in the MyModel model.

When you create a new instance of MyModel and set my_field to an odd number, Django’s validation system will raise a ValidationError.

Here’s an example of how to use model validation in a Django view:

from django.shortcuts import render
from myapp.models import MyModel

def my_view(request):
    if request.method == 'POST':
        my_field_value = request.POST['my_field']
        my_model = MyModel(my_field=my_field_value)
        try:
            my_model.full_clean()
        except ValidationError as e:
            # handle validation error
            pass
        else:
            # save the model
            my_model.save()
    else:
        return render(request, 'my_template.html')

In this example, when the user submits a form with a value for my_field, we create a new instance of MyModel, set my_field to the user-provided value, and call full_clean() on the model to run its validators. If full_clean() raises a ValidationError, we handle the error appropriately (e.g. by showing an error message to the user), otherwise we save the model instance.

相关标签

博客作者

热爱技术,乐于分享,持续学习。专注于Web开发、系统架构设计和人工智能领域。