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

时间:2016-05-17 05:49:17

标签: 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

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

1 个答案:

答案 0 :(得分:5)

首先,您不需要同时使用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)