私は2つのモデル(LikeとNews)を持っています。私はdjango-rest-frameworkを使ってWeb APIを作成しています。django rest frameworkはカスタムオブジェクトを返します
モデル:2つのモデルの
class Like(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
pub_date = models.DateTimeField(default=timezone.now)
class News(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=150)
...
likes = GenericRelation(Like)
シリアライザ:
class LikeObjectRelatedField(serializers.RelatedField):
def to_representation(self, value):
if isinstance(value, User):
return 'User: ' + value.username
elif isinstance(value, News):
return 'News: ' + value.title
...
raise Exception('Unexpected type of tagged object')
class LikeSerializer(serializers.ModelSerializer):
user = UserSerializer()
content_object = LikeObjectRelatedField(read_only=True)
class Meta:
model = Like
field = ('user', 'content_object', 'pub_date')
class NewsSerializer(serializers.HyperlinkedModelSerializer):
user = UserSerializer()
likes = LikeSerializer(many=True)
class Meta:
model = News
fields = ('user', 'title', 'body', 'article_image', 'pub_date', 'likes')
ビュー:
class NewsViewSet(viewsets.ModelViewSet):
queryset = News.objects.all().order_by('-pub_date')
serializer_class = NewsSerializer
これでは私はJSONオブジェクトを取得します。しかし、Newsオブジェクトの場合、ニュースアイテムの好きな数だけが必要で、そのアイテムのお気に入りリストにrequest.user
が存在するかどうかをチェックします。代わりに、私はすべてのユーザ(およびユーザ情報)を返却しており、コンテンツオブジェクト、再びユーザなどを好む。
NewsSerializerでLikeを使用するためのカスタムフィールドを作成すると、好きな人のしかし、私はrequest.userがLikesリストにあるかどうか確認できません。
class LikeRelatedField(serializers.RelatedField):
def to_representation(self, value):
return value.count()
Newsオブジェクトの好きな数だけを取得するにはどうすればよいですか。また、request.user
がその好きなリストに含まれているかどうかを確認し、のブール値を追加するか、NewsオブジェクトごとにFalseを追加しますか?