Django:更新请求.用户瞬间

2024-04-19 13:06:31 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的模型

class Extra(models.Model):
    user = models.ForeignKey(User)
    timestamp = models.DateTimeField(null=True, blank=True)

我的观点是

^{pr2}$

我试图在用户请求特定页面时保存日期时间。在

如您所见,如果关于用户的数据已经存在于数据库中,那么当用户请求页面时,我会更新它,否则我将为该用户创建一个新实例。在

但这不是一个好方法,因为它更新的是整个数据库,而不仅仅是与请求.用户正如我们在我们的视野中看到的(我猜是第四行)。在

那么,我如何使用变量“new”,因为它已经保存了数据(如果存在)&update请求.用户数据库中的实例?在

请用这个代码帮我。提前感谢:)


Tags: 数据实例用户模型数据库truemodelmodels
2条回答

我不确定这是否能解决你的问题,但也许这可以帮助你达到你想去的地方。 在我的应用程序中,我要么插入带有“created”时间戳的记录,要么使用“updated”时间戳更新现有记录,具体取决于该记录是否已经存在。如果我正确地理解了你的问题,那么它就不完全一样了,但我认为它已经足够接近了,可以给你一些工作上的东西。在

所以我要做的是重写类中的标准save方法。因为我对所有表上的所有记录都是这样做的,所以我在基类中也做过,但是你可以很容易地在你需要的类上这样做。在

看看你的课,我会添加如下内容:

class Extra(models.Model):
       user = models.ForeignKey(User)
       timestamp = models.DateTimeField(null=True, blank=True)

       def save(self, *args, **kwargs):
           ''' Check to see if the record exists '''
           if not self.id:
           ''' If there is no id on the record it must be new so set the insert data '''
               self.user = request.user
               self.timestamp = timestamp.now()
           else:
               ''' If there is an id just update the timestamp '''
               self.timestamp = timestamp.now()
           return super(Extra, self).save(*args, **kwargs)

基本上,它要做的是拦截对数据库的save调用,检查记录是否是新的,处理需要处理的内容,然后使用return语句将记录发送到数据库。在

正如我所说,这也许不能解决你的问题,但希望能有所帮助。在

祝你好运。在

只需在过滤后的查询集中调用update()。你就快到了:)

new = Extra.objects.filter(user=request.user)

if new:
    # call update() on your QuerySet
    new.update(timestamp=timezone.now())

else:
    Extra.objects.create(user=request.user, timestamp=timezone.now())

Django Docs中也有一个类似的例子。在

相关问题 更多 >