我有點奇怪的問題,我不能解釋。Django使用分頁刪除查詢集,沒有捕獲到集合的所有部分
我有一個django項目,周圍有一些陳舊的舊物體。例如,可以說我的對象看起來像這樣:
class blog_post(models.Model):
user_account = models.ForeignKey('accounts.Account')
text = models.CharField(max_length=255)
authors = models.ManyToManyField(author)
created = models.DateTimeField(blank=True, null=True)
這不是我的模型的確切副本,但足夠接近。
我創建了一個管理命令來構建這些有序的對象的查詢集,然後用分頁程序刪除與
我的命令看起來是這樣的:
all_accounts = Account.objects.all()
for act in all_accounts.iterator():
stale_objects = blog_post.objects.filter(user_account=act,
created=django.utils.timezone.now() - datetime.timedelta(days=7))
paginator = Paginator(stale_objects.order_by('id'), 100)
for page in range(1, paginator.num_pages + 1):
page_stale_objects = blog_post.objects.filter(id__in=paginator.page(page).object_list.values_list('id'))
page_stale_objects.delete()
的問題我有在我用命令刪除這些對象之後,仍然存在適合查詢集參數但不會被刪除的對象。所以,我必須運行該命令3次以正確查找並刪除所有對象。
我首先想到我的日期範圍只是奇怪的在DateTime的邊緣,所以沒有捕獲在我的命令時間後不到1周的對象。事實並非如此,我已經從查詢集中刪除了created = ...過濾器,並得到了相同的結果。
爲什麼我的查詢集在第一次運行此命令時沒有捕獲所有對象?沒有過多的物體,最多約30,000行。
Paginator分頁您的數據。我假設如果你刪除'page_stale_objects',那麼只會刪除1個頁面(這意味着你發現的對象數量超過了paginator的'per_page'值) –