2016-05-17 48 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

是的兩次。 –