@marselabdullin

Как передавать пользователя через rest django?

Есть модель события, которая привязана к пользователю. При создании события через rest задаю все параметры, кроме пользователя, но он ругается, что пользователь - null. При создании через админ панель и сам сайт пользователь берется через request.user, но как сделать это через rest не знаю

models.py:
class Event(models.Model):
    """Event which create user"""
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                            on_delete=models.CASCADE, verbose_name="Пользователь")
    title = models.CharField(max_length=70, verbose_name="Название")
    content = models.CharField(max_length=300, verbose_name="Содержание")
    event_date = models.DateTimeField(verbose_name="Дата события")

    def __str__(self):
        return self.title


serializers.py:
class EventSerializer(serializers.Serializer):
    title = serializers.CharField()
    content = serializers.CharField()
    event_date = serializers.DateTimeField()


    def create(self, validated_data):
        return Event.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.title = validated_data.get('title', instance.title)
        instance.content = validated_data.get(
            'content', instance.content)
        instance.event_date = validated_data.get('event_date',
             instance.event_date)
        instance.save()
        return instance


views.py(часть сериалайзера):
class EventView(APIView):
    def get(self, request):
        events = Event.objects.all()
        serializer = EventSerializer(events, many=True)
        return Response({"events": serializer.data})

    def post(self, request):
        event = request.data.get('event')
        serializer = EventSerializer(data=event)
        if serializer.is_valid(raise_exception=True):
            event_saved = serializer.save()
        return Response({"success": "Event created successfully"})
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 3
tumbler
@tumbler
бекенд-разработчик на python
DRF позволяет во вьюхе делать self.request.user, а в сериалайзерах - достучаться до вьюхи через контекст: self.context['view'].request.user
Ответ написан
kgb_zor
@kgb_zor
I need your traceback.
Тут несколько вариантов.
1. Вы добавляете user_id к вашим данным, чтоб получить экземпляр User.
2. Так как эти данные можно легко подменить и если вам важно, чтоб ивент создавался для юзера, который авторизован, то нужно использовать JWT(Json Web Token).
Ответ написан
@szelga
попробуйте SessionAuthentication. документация обещает, что тогда в get и post ваших APIView будет request.user.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы