11

ユーザー(本の所有者)への外部キーを持つ Book モデルがあります。

class Book(models.Model):
    owner = models.ForiegnKey(User)
    ...

ログインしたユーザーが所有する書籍を表示する Book の ModelViewSet を作成しました。

class BookViewSet(viewsets.ModelViewSet):
    model = Book
    serializer_class = BookSerializer
    def get_queryset(self):
        return Book.objects.filter(owner=self.request.user)

新しい本を作成するために、残りのクライアントから送信されたデータではなく、ユーザー フィールドを request.user で保存します (セキュリティを強化するため)。例えば:

def create(self, request, *args, **kwargs):
    request.DATA['user'] = request.user
    ... (some code to create new Book from request.DATA using serialize class)

しかし、このエラーが発生しました:この QueryDict インスタンスは不変です。( request.DATA は不変の QueryDict であり、変更できないことを意味します)

django rest フレームワークでオブジェクトを作成するときにフィールドを追加するより良い方法を知っていますか?

4

3 に答える 3

16

更新:v3以降、これを行う必要があります:

def perform_create(self, serializer):
    serializer.save(owner=self.request.user)

原則は変わりません。


ブック シリアライザーのownerフィールドを読み取り専用にしてから、ユーザーとの関連付けを に設定しpre_save()ます。

何かのようなもの:

def pre_save(self, obj):
    obj.owner = self.request.user

「スニペットとユーザーの関連付け」のチュートリアル セクションを参照してください。

それが役立つことを願っています。

于 2013-09-02T10:54:53.977 に答える