У меня есть две модели (Like and News). Я использую django-rest-framework для создания веб-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')
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, я могу получить номер . Но я не могу проверить, находится ли request.user в списке Likes.
class LikeRelatedField(serializers.RelatedField):
def to_representation(self, value):
return value.count()
Что мне нужно сделать, чтобы получить только количество понравившихся объектов новостей. Также проверьте, находится ли список request.user
в этом списке и может добавить логическое значение user_in_likes:True
или False для каждого объекта новостей?