这可以用ORM完成吗? - Django

时间:2010-03-24 17:37:32

标签: python sql django orm django-orm

我在数据库中列出了一些项目,通过 Reddit的算法进行排序。

就是这样:

def reddit_ranking(post):
    t = time.mktime(post.created_on.timetuple()) - 1134000000
    x = post.score

    if x>0: y=1
    elif x==0: y=-0
    else: y=-1

    if x<0: z=1
    else: z=x

    return (log(z) + y * t/45000)

我想知道是否有任何聪明的方法来使用 Django的ORM ,以便批量更新模型。

不执行此操作:

items = Item.objects.filter(created_on__gte=datetime.now()-timedelta(days=7))
for item in items:
    item.reddit_rank = reddit_rank(item)
    item.save()

我知道F()对象,但我无法弄清楚这个函数是否可以在ORM中执行。


有什么想法吗?

非常感谢帮助!

1 个答案:

答案 0 :(得分:2)

手动完成这项工作并不多:

from django.db import connection

items = Item.objects.filter(created_on__gte=datetime.now()-timedelta(days=7))
cursor = connection.cursor()
cursor.executemany("UPDATE myapp_item SET reddit_rank = %s WHERE id = %s",
                   [(reddit_rank(item), item.pk) for item in items])
cursor.close()