在 Django 中为字符字段添加自定义验证

Adding a custom validation for a character field in Django

假设我像这样在模型中定义一个字符字段 -

class model_name(models.Model):
    name = models.CharField()

我想验证某些特定名称的名称条目,例如 -

name_list = ['foo', 'bar']

我怎样才能做到这一点?

您可以在表单中定义自定义 clean_name 方法。例如

......
def clean_name(self):
    name_list = ['foo', 'bar']
    cd = self.cleaned_data
    if cd['name'] not in name_list:
        raise forms.ValidationError('Name is not in the list.')
    return cd['name']

您必须按照 https://docs.djangoproject.com/es/1.9/ref/models/fields/#choices

中所述设置参数 choices

那里的例子:

from django.db import models

class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    YEAR_IN_SCHOOL_CHOICES = (
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
    )
    year_in_school = models.CharField(max_length=2,
                                      choices=YEAR_IN_SCHOOL_CHOICES,
                                      default=FRESHMAN)

    def is_upperclass(self):
        return self.year_in_school in (self.JUNIOR, self.SENIOR)