Я использую структуру отдыха django, и у меня есть объект, который создается с помощью набора моделей и сериализатора моделей. Это представление доступно только аутентифицированным пользователям, и объект должен установить в своем поле 'uploaded_by' значение этого пользователя.
Я прочитал документы и пришел к выводу, что это должно работать
вид:
class FooViewset(viewsets.ModelViewSet):
permission_classes = [permissions.IsAdminUser]
queryset = Foo.objects.all()
serializer_class = FooSerializer
def get_serializer_context(self):
return {"request": self.request}
сериализатор:
class FooSerializer(serializers.ModelSerializer):
uploaded_by = serializers.PrimaryKeyRelatedField(
read_only=True, default=serializers.CurrentUserDefault()
)
class Meta:
model = Foo
fields = "__all__"
Однако это приводит к следующей ошибке:
django.db.utils.IntegrityError: NOT NULL constraint failed: bar_foo.uploaded_by_id
Это говорит о том, что "uploaded_by" не заполняется сериализатором.
Исходя из моего понимания документации, это должно было добавить поле к проверенным данным из сериализатора как часть метода create.
Ясно, что я что-то неправильно понял!