私はDjango REST Frameworkで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
)
それは正常に動作しますが、私は1つのリソースのクエリセットに新しいオブジェクトを追加するとき。何も起こらず、古いクエリが表示されます。
RESOURSES
を私のモジュールに印刷しようとしましたが、それは一度印刷され、他のget要求はそれを引き起こさない。
次にをクラスResourceApiView
に直接移動し、モジュール内で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):
...
それは私がget
方法でRESOURSES
を入れたときにのみ正常に動作します。
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