2016-05-17 3 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 Miコードは機能しません。 – Dvex

答えて

4

まず、all()filter()を一緒に使用する必要はありません。第二に、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

はい、どちらもあります。 –

関連する問題