我正在使用 django rest 框架,并且我有一个通过模型视图集和模型序列化器创建的对象。此视图只能由经过身份验证的用户访问,并且对象应将其“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 方法的一部分。
显然我误解了什么!