Почему это случайное поведение?
Когда мы смотрим в SC запроса (как упомянул @Kenny Ackerman), он возвращает объект QueryDict
, если вы передаете данные типа носителя ('application/x-www-form-urlencoded'
или 'multipart/form-data'
)к классу представления.
Эта проверка выполняется в методе is_form_media_type()
класса Request
.
Если выпередают данные application/json
в представление, request.data
будет объектом dict
.
Как воспроизвести поведение?
Воспроизвести можно, отправив различные данные ContentType
в поле зрения.(В инструменте POSTMAN используйте form-data
и raw JSON
для получения поведения)
Как получить текущего вошедшего в систему пользователя в сериализаторе?
Method-1 передать дополнительный аргумент .save()
(как упомянуто @Linovia) путем переопределения perform_create()
метод
class CreateView(CreateAPIView):
serializer_class = ...
queryset = ...
def post(self, request, *args, **kwargs):
request.data['user'] = request.user.pk
return self.create(request, *args, **kwargs)
<b>def perform_create(self, serializer):
serializer.save(user=self.request.user)</b>
метод-2 Использование CurrentUserDefault()
класс, как показано ниже
from django.contrib.auth import get_user_model
User = get_user_model()
class MySerializer(serializers.ModelSerializer):
<b>user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), default=serializers.CurrentUserDefault())</b>
class Meta:
# your code