2016-05-17 49 views
1

我需要检查是否已创建其他模型,并填充字段。 如果另一个模型具有任何值的字段,则尝试创建的当前模型不应该发生。如果可能的话发送一条错误消息。Django - 在保存模型前检查一些字段

这是我当前的代码:

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

@SergeyGornostaev米码不起作用。 – Dvex

回答

4

首先,您不需要一起使用all()filter()。其次,使用exists()而不是first()。如果QuerySet包含任何结果,则返回True,否则返回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) 
+0

保存方法,也适用于方法更新?变量self,是要创建的当前行吗? – Dvex

+0

是的两次。 –