1

質問があります...

message_batch = Message.objects.all()[500]

オブジェクトを取得するために別のデータベース呼び出しを行う必要はありません。また、オブジェクトが既にメモリ内にあるため、ポイントは何ですか。

だから私はこのように更新しようとしました:

message_batch.update(send_date=datetime.datetime.now(), status="Sent")

しかし、次のエラー メッセージが表示されます。

スライスが取得されると、クエリを更新できません。

なんで?この辺りはありますか?既にメモリ内にあるオブジェクトを更新して、それらを取得するために別の呼び出しを行わないようにしたい。

これは私の完全なコードであり、これを回避する必要があります....

total = Message.objects.filter(status="Unsent", sender=user,   batch=batch).exclude(recipient_number__exact='').count()

for i in xrange(0,total,500):
    message_batch = Message.objects.filter(status="Unsent").exclude(recipient_number__exact='')[i:i+500]
    # do some stuff here
    # once all done update the objects
    message_batch.update(send_date=datetime.datetime.now(), billed=True)
4

2 に答える 2

0

主キーでオブジェクトを更新できます。

base_qs = Message.objects.filter(status="Unsent", sender=user, batch=batch).exclude(recipient_number__exact='')
total = base_qs.count()

for i in xrange(0, total, 500):
    page = list(base_qs[i:i+500])
    page_ids = [o.pk for o in page]
    # Do some stuff here
    base_qs.filter(pk__in=page_ids).update(send_date=datetime.datetime.now(), billed=True)
于 2013-08-27T15:23:17.613 に答える