Je soumets une demande POST via Django form à mon Django Rest Framework api).
Voici un extrait de mon formulaire:
<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)
Je réussis POST (et l'élément est créé dans la base de données), mais une fois que j'enregistre, je vais dans l'url /api/entry/
qui montre mon api avec Markdown. Je voudrais le faire revenir à une URL spécifique.
Existe-t-il un moyen de personnaliser l'emplacement de la redirection POST
en cas de succès?
Sérialiseur ajouté:
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
viewsets.ModelViewSet
a une méthode create
qui retourne l'objet Response
. L'objet de réponse est un sous-type de Django Response
. Par conséquent, vous pouvez modifier le comportement en utilisant HttpResponseRedirect
dans la méthode create
. Par exemple:
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)