私はDjango REST Frameworkを使用して以下のシリアライザを持っています。これは私がこれまで持っているものであるRest Frameworkシリアライザメソッド
...
serializer.py
class ProductSerializer(serializers.ModelSerializer):
score = serializers.SerializerMethodField('get_this_score')
class Meta:
model = Product
fields = ('id', 'title', 'active', 'score')
def get_this_score(self, obj):
profile = Profile.objects.get(pk=19)
score = [val for val in obj.attribute_answers.all() if val in profile.attribute_answers.all()]
return (len(score))
このスニペットを持ついくつかの問題がありますurls.py
url(r'^products/(?P<profile_id>.+)/$', ProductListScore.as_view(), name='product-list-score'),
コードの
1)pram pk = 19はハードコードされています。self.kwargs['profile_id'].
私は試してみましたが、kwargをメソッドに渡す方法がわからず、profile_idを動作させることができません。つまり、私はURLから取得できません。
2)このコードのいずれかをモデルにする必要がありますか?モデルに追加しようとしましたが、やはりargsを渡すことができます。
models.py すなわちメソッドクラスあなたはこのような何かを行うことによってPROFILE_IDを得ることができるよう
def get_score(self, profile):
score = [val for val in self.attribute_answers.all() if val in
profile.attribute_answers.all()]
return len(score)
私はモデルでこれを持っているというアイデアが気に入っています。 SerializerMethodField source =を使用すると、私はparmsを渡すことができません。 SerializerMethodFieldを使用し、要求argsとオブジェクトをモデルメソッドに渡す例を私に教えてください。これは本当に私を理解するのに役立ちます。ありがとうございます。 – jason
私は@jason –
の質問に参加しています。しかし、この場合、「obj」はどのような場合でもプロファイルインスタンスに設定されるため、あなたはそれを行う必要はないと思います。 – Pynchia