私はdjango restフレームワークを使用しています.modelviewsetとmodelserializerを介して作成されたオブジェクトがあります. このビューには認証されたユーザーのみがアクセスでき、オブジェクトは「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 メソッドの一部として、シリアライザーからの検証済みデータにフィールドを追加する必要がありました。
明らかに私は何かを誤解しています!