gpt4 book ai didi

django - 记录列表未在 Django REST 框架中获取更新的记录..?

转载 作者:行者123 更新时间:2023-12-02 01:02:07 24 4
gpt4 key购买 nike

在 Django REST Framework API 中,数据库表记录列表不会更新,直到 API 重新启动或 python 文件(如模型、序列化程序或 View )中的任何代码更改。我试过事务提交,但没有成功。以下是我的观点:

class ServiceViewSet(viewsets.ModelViewSet):
#authentication_classes = APIAuthentication,
queryset = Service.objects.all()
serializer_class = ServiceSerializer
def get_queryset(self):
queryset = self.queryset
parent_id = self.request.QUERY_PARAMS.get('parent_id', None)
if parent_id is not None:
queryset = queryset.filter(parent_id=parent_id)
return queryset
# Make Service readable only
def update(self, request, *args, **kwargs):
return Response(status=status.HTTP_400_BAD_REQUEST)
def destroy(self, request, *args, **kwargs):
return Response(status=status.HTTP_400_BAD_REQUEST)

序列化器看起来像这样:

class ServiceSerializer(serializers.ModelSerializer): 

class Meta:
model = Service
fields = ('id', 'category_name', 'parent_id')
read_only_fields = ('category_name', 'parent_id')

模型看起来像这样:

class Service(models.Model):
class Meta:
db_table = 'service_category'
app_label = 'api'
category_name = models.CharField(max_length=100)
parent_id = models.IntegerField(default=0)
def __unicode__(self):
return '{"id":%d,"category_name":"%s"}' %(self.id,self.category_name)

此问题仅出现在该服务上,其余 API 工作正常。任何帮助将不胜感激。

最佳答案

因为您要在 self.queryset 上设置查询集,这是一个类属性,它正在被缓存。这就是为什么您没有为每个请求获取更新的查询集,这也是为什么 Django REST Framework calls .all() on querysets in the default get_queryset .调用.all()在查询集上,它将不再使用缓存的结果并将强制进行新的评估,这正是您要寻找的。

class ServiceViewSet(viewsets.ModelViewSet):
queryset = Service.objects.all()

def get_queryset(self):
queryset = self.queryset.all()
parent_id = self.request.QUERY_PARAMS.get('parent_id', None)

if parent_id is not None:
queryset = queryset.filter(parent_id=parent_id)

return queryset

关于django - 记录列表未在 Django REST 框架中获取更新的记录..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27242811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com