Я использую django rest Framework, и у меня есть объект, создаваемый с помощью набора моделей, и сериализатор моделей. Это представление доступно только аутентифицированным пользователям, и объект должен установить свое поле 'uploaded_by', чтобы быть этим пользователем.
Я прочитал документы и пришел к выводу, что это должно работать
Viewset:
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.
Очевидно, я что-то неправильно понял!