2013-11-21 26 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")