在哪里编写 Django 自定义验证器

Shr*_*hri 2 django django-models

我到底必须在哪里编写 Django 文件夹中的自定义验证器?

下面是我的模型所在的文件夹 /home/shrivatsa555/childrenGK/cgkapp/models.py

我只需要验证 1、2 和 3 范围内的问题难度级别:

class Questions(models.Model):
    Question_Number = models.AutoField(primary_key = True),
    Question_Text = models.CharField(max_length = 1000),
    Option1 = models.CharField(max_length=500),
    Option2 = models.CharField(max_length=500),
    Option3 = models.CharField(max_length=500),
    Option4 = models.CharField(max_length=500),
    Answer = models.CharField(max_length=500),
    Difficulty_Level = models.IntegerField(validators=[validate_number])
Run Code Online (Sandbox Code Playgroud)

我在 views.py 中编写了一个自定义验证器,但它不起作用。

ale*_*lex 7

有 3 种方法,我至少知道:

  1. 创建一个 validators.py 文件并在模型中导入您的验证器并像这样使用它们:

     title = models.CharField(max_length=255, validators=[validate_title])
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个 validators.py 文件并在表单中导入您的验证器并像这样使用它们:

     def __init__(self, *args, **kwargs):
         super(QuestionsForm, self).__init__(*args, **kwargs)
         self.fields['title'].validators.append(validate_title)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您可以创建自定义 clean() 表单方法并在此处使用您的验证器:

     def clean(self):
         cleaned_data = super(IceCreamOrderForm, self).clean()
         title = cleaned_data.get('title', '')
         if title in x:
             msg = '...'
             raise forms.ValidationError(msg)
         return cleaned_data
    
    Run Code Online (Sandbox Code Playgroud)