【问题标题】:Adding a custom validation for a character field in Django在 Django 中为字符字段添加自定义验证
【发布时间】:2016-02-23 09:49:30
【问题描述】:

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

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

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

name_list = ['foo', 'bar']

我怎样才能做到这一点?

【问题讨论】:

  • 您能准确解释一下您要检查模型名称字段的验证吗?

标签: python django django-models django-forms


【解决方案1】:

您必须按照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)

【讨论】:

  • 抱歉回复晚了。这是我的个人项目之一。由于我的办公室项目,我没有这样做。感谢您的回答。
【解决方案2】:

您可以在表单中定义自定义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']

【讨论】:

  • 感谢您的回答。
猜你喜欢
  • 2016-02-01
  • 2016-07-17
  • 1970-01-01
  • 2015-09-25
  • 2012-11-30
  • 2011-09-16
  • 1970-01-01
  • 2023-03-11
  • 2018-03-17
相关资源
最近更新 更多