从验证器访问模型实例

Jas*_*ard 7 django django-models

我将如何访问正在验证器中针对特定字段进行验证的模型实例?

模型.py

def question_instances(value):  #validator     
   # not sure how to get model instance within this function

   industry = model_instance.industry
   questions = Question.objects.filter(industry=industry)
   if questions.count() > 3:
      raise ValidationError('Too many questions for this industry')

class ExampleQuestion(models.Model):
    industry = models.ForeignKey(Industry, on_delete=models.CASCADE)    
    question = models.CharField(max_length=200, validators=[question_instances])

    def __str__(self):
        return self.industry.industryname
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 10

你不能。如果你需要这个,不要使用验证器;改用干净的功能。

class ExampleQuestion(models.Model):
    industry = models.ForeignKey(Industry, on_delete=models.CASCADE)    
    question = models.CharField(max_length=200)

    def clean(self):
         industry = self.industry
         questions = Question.objects.filter(industry=industry).exclude(pk=self.pk)
         if questions.count() > 3:
             raise ValidationError('Too many questions for this industry')
Run Code Online (Sandbox Code Playgroud)