我使用Django REST框架構建Web應用程序。有一個簡單的視圖,它返回帶有db字段的引用信息。
resources.py:
瞭解Django中的VIew評估
RESOURCES = {
'genres': GenreSerializer(Genre.objects.all(), many=True).data,
'authors': AuthorSerializer(Author.objects.all(), many=True).data,
......
}
class ResourceApiView(views.APIView):
def get(self, request):
params = request.query_params
response_dict = {}
if params:
# Return RESOURSES based on query params
for i in params:
q = RESOURCES.get(i)
if q:
response_dict[i] = q
else:
# Return all RESOURSES
response_dict = RESOURCES
return Response(response_dict,
status=status.HTTP_200_OK
)
它工作正常,但是當我添加新的對象到一個資源查詢集。沒有任何反應,它顯示舊的查詢。
我試過在我的模塊中打印RESOURSES
,它打印一次,其他get請求不會觸發它。
然後,我直接在ResourceApiView
類中移動RESOURSES
,它的行爲與在模塊中的RESOURSES
處相同。
class ResourceApiView(views.APIView):
RESOURCES = {
'genres': GenreSerializer(Genre.objects.all(), many=True).data,
'authors': AuthorSerializer(Author.objects.all(), many=True).data,
......
}
def get(self, request):
...
它做工精細,只有當我把RESOURSES
在get
方法。
class ResourceApiView(views.APIView):
def get(self, request):
RESOURCES = {
'genres': GenreSerializer(Genre.objects.all(), many=True).data,
'authors': AuthorSerializer(Author.objects.all(), many=True).data,
......
}
但爲什麼會發生?爲什麼我無法評估每個方法調用的類屬性查詢?
因爲您的'RESOURCES'僅在服務器啓動時才被評估,另一方面,當您將其放入get方法中時,將針對每個請求進行評估。這就是爲什麼你有'queryset'屬性和'get_queryset'方法 – dnit13