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();')
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();')