«Просматриваемый» атрибут в структуре Django Rest - PullRequest
0 голосов
/ 05 апреля 2019

Я использую приведенное ниже решение, чтобы проверить, просматривал ли пользователь сообщение.

Лучший способ сделать атрибут «просмотренным» для сообщений внутри группы пользователей?

и в django-rest-framework я создаю ListApiView для получения всех сообщений:

class PostListView(ListAPIView):
    serializer_class = PostSerializer
    permission_classes = (IsAuthenticated, )
    pagination_class = PostListPagination

    def get_queryset(self):

        return Post.objects.filter(state='published').order_by('-created')

и сериализаторы:

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields= '__all__'

Теперь я хочу, чтобы для каждого сообщения в PostListView было указано логическое поле с именем «Просмотрено», чтобы показать, является ли пользователь, прошедший проверку подлинности, просмотревшим это сообщение.

как то так:

class PostSerializer(serializers.ModelSerializer):
    viewed = serializers.BooleanField(read_only=True)
    class Meta:
        model = Post
        fields= '__all__'

    def check_is_viewed(current_user, post_instance):
        # if user viewed this post:
        viewed.value = True
        # else:
        viewed.value = False

1 Ответ

2 голосов
/ 05 апреля 2019

Вы можете использовать MethodField .

class PostSerializer(serializers.ModelSerializer):
    viewed = serializers.SerializerMethodField()
    class Meta:
        model = Post
        fields= '__all__'

    def get_viewed(self, obj):
        return obj.viewers.exist()
...