私は2つのモデル(LikeとNews)を持っています。私はdjango-rest-frameworkを使ってWeb APIを作成しています。django rest framework - 要求コンテキストキーエラー
class Like(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
class News(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=150)
...
likes = GenericRelation(Like)
オブジェクトようはニュースオブジェクトを気に入っ誰保存するために、独自のユーザー・フィールドがあります。特定のユーザーがNewsオブジェクトのいずれかのものに存在するかどうかを確認するために、私はSerializerMethodFieldからrequest.userを取得しています。
class NewsSerializer(serializers.HyperlinkedModelSerializer):
user = UserSerializer()
likes_count = serializers.IntegerField(source='likes.count', read_only=True)
user_in_likes = serializers.SerializerMethodField()
class Meta:
model = News
fields = ('user', 'title', 'body', 'article_image', 'pub_date', 'likes_count', 'user_in_likes')
def get_user_in_likes(self, obj):
user = self.context['request'].user
what = obj.likes.filter(user=user).exists()
return what
私は/ニュース/ URLを行くとき、私は、各ニュースのオブジェクトのための真/偽にuser_in_likes
を含むJSONオブジェクトを取得します。
しかし、私はNewsSerializer class
および他の同様のシリアライザをインポート別のモデルのための別のserialzerあります
:私はエラーを取得しています活動のオブジェクトを取得するには、今、私はKeyError at /activities/
'request'
/activities/
を訪問する場合 class ActivityObjectRelatedField(serializers.RelatedField):
def to_representation(self, value):
if isinstance(value, User):
serializer = UserSerializer(value)
elif isinstance(value, Job):
serializer = JobSerializer(value)
elif isinstance(value, News):
serializer = NewsSerializer(value)
elif isinstance(value, Tender):
serializer = TenderSerializer(value)
else:
raise Exception('Unexpected type of tagged object')
return serializer.data
class ActivitySerializer(serializers.HyperlinkedModelSerializer):
actor = ActivityObjectRelatedField(read_only=True)
target = ActivityObjectRelatedField(read_only=True)
class Meta:
model = Activity
fields = ('url', 'actor', 'verb', 'target', 'pub_date')
を
そして、NewsSerializeクラスのSerializerMethodの行を指しています(self.context['request'].user
が使用されています)。私は/news/
のURLを参照してください場合
Exception Location: /vagrant/myproject/news/serializers.py in get_user_in_likes, line 25
ここでも、すべてが正常であると私はニュースのオブジェクトを取得します。私はここで何が欠けていますか? ActivitiesSerializer class
でrequest
が認識されないのはなぜですか?この問題を解決するのを手伝ってください。ありがとうございました。
ありがとうございました! – Aamu
とても役に立ちました – po5i