Можно ли это сделать с помощью ORM? - Джанго - PullRequest
1 голос
/ 24 марта 2010

У меня есть несколько пунктов, перечисленных в базе данных, упорядоченных по алгоритму 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)

Мне интересно, есть ли какой-нибудь умный способ использования 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 Ответ

2 голосов
/ 24 марта 2010

Это не так много, чтобы сделать это вручную:

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()
...