7

私は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 メソッドの一部として、シリアライザーからの検証済みデータにフィールドを追加する必要がありました。

明らかに私は何かを誤解しています!

4

3 に答える 3