如何强制函数在每次调用时评估queryset

时间:2017-11-17 12:47:19

标签: mysql django pythonanywhere

我正在django中创建一个社交媒体网站,其中每个用户可以拥有多个帐户,每个帐户都有自己的帖子,朋友等。为了确定加载模板时使用哪个帐户,我已经定义了这个功能:

def get_active_account(request):
    for account in Account.objects.filter(user=request.user):
        if account.active:
            return account

大多数视图会在需要评估当前有效帐户时调用get_active_account。现在,更改活动帐户时出现问题。在视图中:

def set_active(request, pk):
    account = get_object_or_404(Account, pk=pk)
    account.set_active()
    return redirect('/')

在帐户模型中:

def set_active(self):
    for account in Account.objects.filter(user=self.user):
        account.active = False
        account.save()
    self.active = True
    self.save()

这似乎什么都不做;引用活动帐户的任何内容仍会显示之前有效的帐户,尝试创建帖子等会在旧帐户下执行。然而,在刷新之后,一切都应该如此。根据我的阅读,这是一个问题,get_active_account函数评估一次查询集,然后在稍后调用时返回一个缓存版本(尽管这可能是一个完全错误的假设)。如何解决问题,让一切工作无需刷新浏览器?

0 个答案:

没有答案