Django object.raw('query') 没有 return 更新查询集

Django object.raw('query') doesnot return updated queryset

class view_name(viewsets.ModelViewSet):
    queryset = model_name.objects.raw('call stored_procedure();')
    serializer_class = model_name_Serializers
    permission_classes = [IsAuthenticated]

因此,当我执行上面的其余框架视图集时。它工作正常。 但是当我更新任何会影响存储过程查询集的值时。

它仍然是 return 以前的查询集,而不是更新后的查询集。 然后我通过 运行 我的数据库 (mysql) 中的调用过程 sql 语句检查了它 return 更新的查询集。

但是这个原始函数继续显示具有先前值的查询集。 重新启动本地主机服务器后,它仅 returns 更新的查询集。

我认为这种行为的原因是 raw 在 class 构造期间执行查询。 documentation 是这么说的:

takes a raw SQL query, executes it, and returns a django.db.models.query.RawQuerySet instance

换句话说 - 您的查询 运行 是您启动项目时的查询,而不是每次调用视图时的查询。 您可以定义 get_queryset 方法并将原始查询放在那里,而不是 queryset class 属性,这样每次调用视图时都会调用它(并执行查询)要求:

def get_queryset(self):
    return model_name.objects.raw('call stored_procedure();')