2016-07-18 9 views
0

私は次のコードを持っています。 これは、DjangoのRest APIを使用して画像をアップロードすることを可能にします。 どう史上により、私は、ユーザーにそれが通常行うの道(からrequest.user)Django rest APIのModelViewSetクラスからリクエストのユーザ名を取得する方法は?

view.py

class PhotoViewSet(viewsets.ModelViewSet, APIView): 
    permission_classes = (permissions.IsAuthenticated,) 

    queryset = Photo.objects.all() 
    serializer_class = PhotoSerializer 

    @receiver(post_save, sender=Photo) 
    def my_handler(sender, instance, **kwargs): 
     print request.user.username #How to make this work? 

url.pyを取得することができません。このクラスの性質

router = routers.SimpleRouter() 
router.register(r'avatar', PhotoViewSet, base_name='love_stackoverflow') 
+0

あなたは...信号であっても、HTTP要求が存在しない状態で発射し、モデルに保存トリガー何の知識を持つことはできませんすることはできません。 'user'を使って何かできるようにしたいのであれば、シグナルハンドラの代わりにビューメソッド/クラスでこれを行う必要があります。 – solarissmoke

+0

権限を確認することができるので、私は考えていた。おそらく、要求しているユーザーをチェックすることも可能です。私は1つのとは違っているので、そのメソッドを使用してファイルをアップロードする方法を理解していないしかし、私は http://www.django-rest-framework.org/api-guide/parsers/#fileuploadparser この例を使用する必要があり、その場合には ModelViewSetクラスのメソッドでは、APIのページにはブラウズオプションがありません。 (私は似たような質問をたくさん見てきましたが、まだ方法を見つけるのが難しいですが、カールはしばしば示唆されていますが、うまくいきません) –

+0

'permissions.isAuthenticated'はビュークラス内でチェックされています。リクエスト。あなたはシグナルハンドラはしません(そうすべきではありません)。あなたのロジックをハンドラからビューコード自体に移すことは可能であるべきです。 – solarissmoke

答えて

1

Photoインスタンスにユーザーを追加する場合は、PhotoSerializer内の(perform_create

)内の CurrentUserDefaultを使用してください(読み取り専用フィールドとして) 0
関連する問題