2013-11-21 24 views
2

我怎麼能在這種情況下更改[book must etc...]與真正的Django代碼:Model.objects.filter([外部表])更新()

Book.objects.filter(processed=True, [book must have all the volumes belonging to it with property is_file_processed set to True]).update(status="PU") 

型號:

class Book(models.Model): 
    title = models.CharField(max_length=100, blank=True) 
    ... 


class Volume(models.Model): 
    file = models.FileField(...) 
    ... 
    is_file_processed = models.BooleanField(default=False) 
    book = models.ForeignKey(Book) 

回答

1

由於這樣的事實,該組具有處理的所有卷中的所有書籍等於其結果是所述一組具有處理的至少一個體積中的所有書籍中減去所述一組具有未處理的卷中的所有書籍:

Book.objects.filter(processed=True, volume__is_file_processed=True).exclude(volume__is_file_processed=False).update(status="PU") 
# Or  
Book.objects.exclude(volume__is_file_processed=False).filter(processed=True, volume__is_file_processed=True).update(status="PU") 
1

請參閱docs 。我認爲這可以工作。

class Book(models.Model): 
    title = models.CharField(max_length=100, blank=True) 
    ... 


class Volume(models.Model): 
    file = models.FileField(...) 
    ... 
    is_file_processed = models.BooleanField(default=False) 
    book = models.ForeignKey(Book, related_name='volumes') 

Book.objects.filter(processed=True, volumes__is_file_processed=True).update(status="PU")