【问题标题】:How to dynamically update a viewset in Django Rest Framework如何在 Django Rest Framework 中动态更新视图集
【发布时间】:2020-11-18 01:40:28
【问题描述】:

我想我只是把这段代码放在了错误的地方,但我想知道是否有人可以在这里提供帮助。我想在最后一个工作日从数据库中获取一个项目。这很好用,但是当我用 gunicorn 启动应用程序时,似乎下面的内容被编译了。所以现在 current_b_day 被评估为 11/13(今天 = 11/16)。但这永远不会改变。因此,即使我通过备用过程将新数据添加到数据库,我的视图集也将始终返回相同的数据集。如果我关闭并备份服务器,它将重新编译并获得 current_b_day 的新值。非常感谢任何帮助!

views.py

from pandas.tseries.offsets import BDay, BMonthEnd, BYearEnd
from datetime import date, datetime

    class YieldCurveViewSet(viewsets.ModelViewSet):
        current = date.today()
        current_b_day = current - BDay(1)  #This never changes and is compiled in!
    
        queryset = YieldCurve.objects.filter(create_date=current_b_day)
        serializer_class = YieldCurveSerializer

【问题讨论】:

    标签: django-rest-framework django-rest-viewsets


    【解决方案1】:

    根据Django Rest Framework documentation,您正在使用的查询集仅被评估一次。
    要对每个请求强制重新评估,您应该在 ViewSet 中实现 get_queryset 方法。

    对于您的模型具有外键用户的简单过滤器:

    def get_queryset(self):
        return YieldCurve.objects.filter(user = self.request.user)
    

    或者在你的情况下:

    def get_queryset(self):
        current = date.today()
        current_b_day = current - BDay(1)    
        return YieldCurve.objects.filter(create_date=current_b_day)
    

    希望这行得通!

    编辑:如果它不起作用,请从链接页面复制功能并添加您的功能。我提供了可以在我们的代码库中运行的代码,所以我省略了额外的功能。

    【讨论】:

    • 谢谢!我知道答案在我想不出要搜索什么的文档中。我正在通过调试运行它,每次点击 URL 时都可以看到它正在被评估。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2016-09-25
    • 2021-01-13
    • 2016-09-30
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多