我有一個如下的 Django 模型:
class Books:
name = models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
timeStamp = models.DateTimeField(auto_now_add=True)
first = models.BooleanField(default=False)
我最近已經在Books表中添加了一百萬個條目并添加了first欄位。現在我想將first每個用戶的第一個創建物件的欄位更新為 True。
all = Books.objects.all()
li = []
for i in all:
if i.user.username not in li:
i.first = True
i.save()
li.append(i.user.username)
我嘗試了以下功能,但執行時間很長,其中包含大量資料。那么有沒有更快的方法呢?嘗試了該bulk_update方法,因此回圈也應該完成。
uj5u.com熱心網友回復:
因為您使用的是 PostgreSQL,所以您可以在特定列上呼叫 .distinct(),然后使用 queryset .update() 方法將所有列更新為相同的值,這應該會更快。
Books.objects.all().order_by('timeStamp').distinct('author').update(first=True)
上面的代碼首先按timeStamp欄位排序查詢集,然后在作者列上呼叫不同的,只留下第一個不同的行(最早的),最后更新列值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/519846.html
