Django 查询集求值序列。意外覆盖的新活动位

Django 查询集求值序列。意外覆盖的新活动位,django,Django,在将新值保存到db中的某个db模型字段后,我试图显示该字段的旧值(RelatedModel.new\u reply)。这应该是一种工作方式,new\u reply字段将回复(通过将其设置为1)标记为收件人未读(rto)。收件人查看邮件后,new\u reply将重置为0。如果收件人有尚未单击查看的新回复,则模板my_view.html会向收件人显示一个标志。收件人第一次查看回复时,会重置标志new\u reply,后续视图不会标记为new 问题在于,response.save()行似乎除了数据库

在将新值保存到db中的某个db模型字段后,我试图显示该字段的旧值(
RelatedModel.new\u reply
)。这应该是一种工作方式,
new\u reply
字段将回复(通过将其设置为1)标记为收件人未读(
rto
)。收件人查看邮件后,
new\u reply
将重置为0。如果收件人有尚未单击查看的新回复,则模板my_view.html会向收件人显示一个标志。收件人第一次查看回复时,会重置标志
new\u reply
,后续视图不会标记为new

问题在于,
response.save()
行似乎除了数据库中存储的值之外,还更改了
d
new\u reply
的值。因此,my_view.html永远不会看到
new_reply==1
,只看到
new_reply==0
。这对我来说似乎很奇怪,因为
d
一旦被分配,就应该独立于db

你知道为什么会发生这种情况以及如何解决吗

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),
    )

我认为这个问题可以归结为何时评估查询集。我将
if response.new_reply==1
语句更改为'if response.new_reply==1:response.new_reply+=1 response.save()elif response.new_reply==2:response.new_reply=0'对上述评论感到抱歉。。。无线问题。下面是完整的评论:我认为这个问题可以归结为何时评估查询集。我将
if response.new\u reply==1
语句更改为“if response.new\u reply==1:response.new\u reply+=1 response.save()elif response.new\u reply==2:response.new\u reply=0 response.save()”,然后在我的视图模板中测试new\u reply==2而不是==1。这似乎是可行的,但却是一种恶作剧。有更好的办法吗?