在Django REST Framework中,数据库表记录的列表直到API重新启动或python文件中的任何代码更改(如模型、序列化程序或视图)才会更新。我尝试过事务提交,但没有成功。以下是我的看法:
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都能很好地工作。任何帮助都将不胜感激。
发布于 2014-12-02 05:03:37
因为您正在self.queryset
上设置queryset (这是一个类属性),所以它将被缓存。这就是为什么您没有为每个请求获得更新的查询集,这也是为什么Django REST框架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
https://stackoverflow.com/questions/27242811
复制