2016-12-02 63 views
0

我想更新字段:number與'當前號碼+隨機數':Can Django F函數批量更新隨機數?

這是我的代碼,我有650個遊戲在數據庫中,它需要將近8秒來更新它。

objs = Game.objects.all() 
for obj in objs: 
    Game.objects.filter(name=obj.name).update(number=F('number') + random.randint(1,100)) 

如果我使用F函數,下面的代碼將有一個問題:
的​​是所有行相同,
我可以隨意使用F功能可按使用不同的數字?或者有什麼方法可以加快我的查詢速度?

Game.objects.all().update(number=F('number') + random.randint(1,100)) 
+0

可能會更好地做到這一點在原始的SQL,在django orm中沒有簡單的方法來做到這一點。 – serg

+0

[以原子方式更新查詢集中每個實例的計數]可能的重複(http://stackoverflow.com/questions/40909357/update-every-instance-in-a-queryset-with-a-count-atomically) – Sayse

+0

不是直接重複,但我想象的解決方案是相同的 – Sayse

回答

1

是的,你可以先在第一步生成隨機數,然後將其分配給遊戲模型的數場, 像這樣:

objs = Game.objects.all() 
for obj in objs: 
    random_number = random.randint(1,100) 
    obj.number = random_number 
    obj.save() 

或者以更好的方式,你不需要迭代通過for循環,只需使用:

def generate_random(request): 
    number = random.randint(1,100) 
    return number 

def your_view(request): 

    objs = Game.objects.all() 
    objs.update(number=F('number') + generate_random()) 

謝謝。

+0

第一個解決方案的作品,但它擊中每個對象的數據庫,所以要警告。第二個仍然給每個對象相同的「隨機」數字 – Qrom