LINUX.ORG.RU

DRF как сделать роут без модели и только с двумя типами запроса?

 , ,


0

1

Всем привет!

Хочется сделать, чтобы в описании общего апи django rest framework отображался роут без привязки к модели и только с типами запроса POST и GET. Более конкретно: это просто лайк к какому-то объекту. Get покажет количество лайков конкретного объекта, POST - добавит еще один. Проблема (с точки зрения кода) в том, что они у меня хранятся в другой БД и обычный viewset мне там никак не использовать. Конечно, можно просто хардкодом в обход DRF сделать, но тогда он не появится в документации автоматом.

Пока код такой (тут заглушки и бред написаны на самом деле):

# serializers.py
LIKE_CHOICES = ('compliant', 'dislike', 'like', 'superlike')

class LikeSerializer(serializers.Serializer):
    receiver = serializers.IntegerField()
    like_type = serializers.ChoiceField(choices=LIKE_CHOICES, default='like')
    def create(self, validated_data):
        print('receiver:', validated_data.get('receiver'))
        print('like:', validated_data.get('like_type'))
        return None

# views.py
class LikeViewSet(viewsets.ViewSet):
    def list(self, request):
        '''Это нужно только для конкретного объекта'''
        likes=1
        return Response({"count": likes})
    def create(self, request):
        '''Это нужно только для конкретного объекта'''
        new_like=LikeSerializer(request.data)
        print(new_like)
        return Response({"status":"ok"})

# urls.py
router = routers.DefaultRouter()
router.register(r'like/([0-9]+)',   api.views.LikeViewSet, base_name='like') # вот эту штуку хочется оставить, чтобы лайки появились в документации

Короче, я пока сильно путаюсь в том, что мне из этого надо оставить, а что убрать. А ещё хочется, чтобы залогиненный юзер автоматически определялся(поэтому в LikeSerializer только receiver без sender-а), так как допустимо ставить лайки только залогиненным юзерам.

★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.