如何在 Django Rest Framework 中动态更新视图集
How to dynamically update a viewset in Django Rest Framework
我想我只是把这段代码放错了地方,但想知道是否有人可以帮忙。我想在最后一个工作日从数据库中获取一个项目。这工作正常,但当我用 gunicorn 启动应用程序时,似乎编译了以下内容。所以现在 current_b_day 被评估为 11/13(今天 = 11/16)。但这永远不会改变。所以我的视图集将始终 return 相同的数据集,即使我通过备用过程向数据库添加新数据也是如此。如果我关闭并备份服务器,它将重新编译并获得 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 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)
希望这有效!
编辑:如果它不起作用,请从链接页面复制该功能并添加您的功能。我提供了可在我们的代码库中运行的代码,因此我省略了额外的功能。
我想我只是把这段代码放错了地方,但想知道是否有人可以帮忙。我想在最后一个工作日从数据库中获取一个项目。这工作正常,但当我用 gunicorn 启动应用程序时,似乎编译了以下内容。所以现在 current_b_day 被评估为 11/13(今天 = 11/16)。但这永远不会改变。所以我的视图集将始终 return 相同的数据集,即使我通过备用过程向数据库添加新数据也是如此。如果我关闭并备份服务器,它将重新编译并获得 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 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)
希望这有效!
编辑:如果它不起作用,请从链接页面复制该功能并添加您的功能。我提供了可在我们的代码库中运行的代码,因此我省略了额外的功能。