0
私はクラスObject
と、state
のメソッドを持つdatetimeパラメータdt
を持っています。 URLのdatetimeパラメータをObject.state()
に渡すにはどうすればよいですか?モデルで使用するDjango RESTフレームワークシリアライザへのパラメータを渡す
モデル:
class Object(models.Model):
def state(self, dt=datetime.datetime.now()) -> dict:
...stuff...
return {'dt': dt, 'other_stuff': stuff}
ビュー:
class ObjectDetail(generics.RetrieveAPIView):
queryset = models.Object.objects.all()
serializer_class = serializers.ObjectSerializer
def get_serializer_context(self):
return {'dt': self.request.query_params.get('dt', datetime.datetime.now())}
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
シリアライザクラス:
class ObjectSerializer(serializers.HyperlinkedModelSerializer):
state = StateSerializer(read_only=True, context={'dt': self.context['dt']})
class Meta:
model = models.Object
fields = ('state')
class StateSerializer(serializers.Serializer):
dt = serializers.DateTimeField()
... other stuff...
あなたは私が余分なコンテキストとしてdt
を渡ししようとしています見ることができるようにビューの前にコンテキストを設定した行state = StateSerializer(read_only=True, context={'dt': dt})
。ここで問題となるのは、ObjectSerializer
が初期化された場合、dt
はself.context['dt']
でアクセスできないため、self
は定義されていません。
'state'の目的は何ですか?オブジェクトが保存されるたびに更新されるべきか、別のアイデアがありますか? – wencakisa
@wencakisa 'state'は渡された' dt 'に依存します。これは、オブジェクトの状態などから生成され、dictです。書き込みはできません。 – Tintin