2017-10-23 19 views
1

私はDjangoフォームからPOSTリクエストをDjango Rest Framework apiに送信しています。ここでPOST後のリダイレクトdjango rest framework

は私のフォームの抜粋です:

<form action="{% url 'entry-list' %}" method="POST" class="form" role="form"> 
{% csrf_token %} 

{{form.as_p}} 
<div class = "form-group"> 
    <button type="submit" class="save btn btn-default btn-block">Save</button> 
</div> 

views.py

class entry_ViewSet(viewsets.ModelViewSet): 
    queryset = Entry.objects.all() 
    serializer_class= EntrySerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,IsOwnerOrReadOnly,) 
    def perform_create(self, serializer): 
     serializer.partial = True 
     serializer.save(created_by=self.request.user) 

私が成功したPOSTを作っています(と項目がデータベースに作成された)、しかし、一度私が保存すると、/api/entry/のURLに行き、私のapiでマークダウンを表示します。私はそれを特定のURLに戻すようにしたいと思います。

POSTが成功するとリダイレクトする場所をカスタマイズする方法はありますか?

追加さシリアライザ:

class EntrySerializer(serializers.ModelSerializer): 

    created_by = serializers.ReadOnlyField(source='created_by.username') 
    class Meta: 
     model = Entry 
     fields = '__all__' 
    def __init__(self, *args, **kwargs): 
     super(EntrySerializer, self).__init__(*args, **kwargs)   
     for x in self.fields: 
      self.fields[x].required = False  
+0

あなたの 'EntrySerializer'を共有できますか? –

+0

シリアライザを追加するために編集されました – TangoAlee

答えて

3

viewsets.ModelViewSetResponseオブジェクトを返すメソッドcreateを有しています。応答オブジェクトのサブタイプはDjango Responseです。したがって、HttpResponseRedirectを使用してcreateメソッドに振る舞いを変更することができます。例:

class entry_ViewSet(viewsets.ModelViewSet): 
    queryset = Entry.objects.all() 
    serializer_class= EntrySerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,IsOwnerOrReadOnly,) 

    def create(self, request, *args, **kwargs): 
     response = super(entry_ViewSet, self).create(request, *args, **kwargs) 
     # here may be placed additional operations for 
     # extracting id of the object and using reverse() 
     return HttpResponseRedirect(redirect_to='https://google.com') 

    def perform_create(self, serializer): 
     serializer.partial = True 
     serializer.save(created_by=self.request.user) 
+1

私はcreateをオーバーライドすることは考えていませんでしたが、最初にsuperを呼び出しました。非常に素晴らしい - ありがとう! – TangoAlee

関連する問題