0

RelatedModel.new_replyデータベースのこのフィールドに新しい値を保存した後、データベース モデル フィールド ( ) の古い値を表示しようとしています。これが機能するはずの方法は、new_replyフィールドが返信を(1に設定することにより)受信者が未読としてマークすることです(rto)。受信者がメッセージをnew_reply表示すると、0 にリセットされます。テンプレート my_view.html は、表示するためにまだクリックしていない新しい返信がある場合、受信者にフラグを表示します。返信が受信者によって最初に表示されると、フラグnew_replyがリセットされ、それ以降の表示には新規のフラグが付けられません。

問題は、行が db に格納されている値に加えての値response.save()を変更しているように見えることです。したがって、 my_view.html には は表示されず、 のみが表示されます。これは、割り当てられるとデータベースから独立しているはずなので、私には非常に奇妙に思えます。new_replydnew_reply==1new_reply==0d

なぜこれが起こるのか、それを修正する方法はありますか?

class ParentModel (models.Model):
    msg = models.TextField()
    author = models.ForeignKey(User)

class RelatedModel (models.Model):
    msg = models.ForeignKey(ParentModel)
    reply = models.TextField()
    rto = models.ForeignKey(User, related_name='rto')
    new_reply = models.IntegerField(null=True, blank=True)

def view_msg(request, msg_id):
    m = get_object_or_404(ParentModel, pk=id)
    r = m.RelatedModel_set.all()
    d = add_csrf(request, m=m, r=r) # d.r.new_reply==1 should be rendered
    # Once the view data is ready for rendering, clear the new_reply
    # bit.  If we do it earlier, we will not be able to mark replies as new.
    if request.user.is_authenticated():
        for response in r:
            # Clear bit if current user is viewing reply addressed to them
            if (request.user == RelatedModel.rto):
                if response.new_reply == 1: # Is it a new reply?
                    response.new_reply = 0 # Reset the new_activity bits
                    response.save()
    return render_to_response('my_view.html',
                              {'db_data': d},
                              context_instance = RequestContext(request),
    )
4

0 に答える 0