如何更新模型但在Django中返回未修改的模型?

我正在使用django-piston来编写RESTful Web服务并出现问题。如何更新模型但在Django中返回未修改的模型?

在models.py:

class Status(models.Model): 

user = models.ForeignKey(User)

content = models.TextField(max_length=140)

class StatusReply(models.Model):

user = models.ForeignKey(User)

reply_to = models.ForeignKey(Status, related_name='replies')

content = models.TextField(max_length=140)

has_read = models.BooleanField(default=False, help_text="has the publisher of the status read the reply")

在handlers.py:

class StatusHandler(BaseHandler): 

allowed_methods = ('GET', 'POST', 'DELETE')

model = Status

fields = ('id',

('user', ('id', 'username', 'name')),

'content',

('replies', ('id',

('user', ('id', 'username', 'name')),

'content',

'has_read'),

),

)

@need_login

def read(self, request, id, current_user): # the current_user arg is an instance of user created in @need_login

try:

status = Status.objects.get(pk=id)

except ObjectDoesNotExist:

return rc.NOT_FOUND

else:

if status.user == current_user: #if current_user is the publisher of the status, set all replies read

status.replies.all().update(has_read=True)

return status

在处理程序,它通过ID返回一个特定的状态。现在我想返回status.replies.all().update(has_read=True)之前的状态,但也要在数据库中进行更新操作。怎么做?提前致谢。

回答:

不知道我是否明白你需要什么。据我了解您的代码,status.replies.all().update(has_read=True)不会更改status但只更改答复。如果这是真的,代码应该做你想做的。如果不是,你可以做的status副本并返回副本:

 if status.user == current_user: 

old_status = status.make_copy()

status.replies.all().update(has_read=True)

return old_status

return status

或者你只是想方法来提前返还和异步做数据库更新?那么你应该看看celery,也许this nice explanation。

以上是 如何更新模型但在Django中返回未修改的模型? 的全部内容, 来源链接: utcz.com/qa/260970.html

回到顶部