Django - 在保存模型之前检查一些字段

Dve*_*vex 2 django validation

我需要检查是否已经创建了其他模型,填写了一个字段.如果另一个模型具有任何值的字段,则不应发生尝试创建的当前模型.如果可能,请发送错误消息.

这是我目前的代码:

class Video(models.Model):
  #####
  # Fields of model
  #####

  def save(self, force_insert=False, force_update=False, *args, **kwargs):
    some_video = Video.objects.all().filter(field_boolean=True).first()
    if not some_video:
      # Save current model
      super(Video, self).save(force_insert, force_update, *args, **kwargs)
    else:
      # avoid save method for the current model created and send error message
Run Code Online (Sandbox Code Playgroud)

我做错了什么或者我错过了什么?这样做的正确方法是什么?

Ser*_*aev 6

首先,你不需要使用all()filter()在一起.其次,使用exists()代替first().True如果QuerySet包含任何结果,False则返回,否则返回.这会尝试以最简单,最快的方式执行查询.

class Video(models.Model):
    name = models.CharField(max_length=30)
    field_boolean = models.BooleanField()

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        if Video.objects.filter(field_boolean=True).exists():
            print('Video with field_boolean=True exists')
        else:
            super(Video, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)