POST django rest 框架后重定向
Posted
技术标签:
【中文标题】POST django rest 框架后重定向【英文标题】:Redirect after POST django rest framework 【发布时间】:2018-04-04 06:49:58 【问题描述】:我正在通过 django 表单向我的 Django Rest Framework api 提交一个 POST 请求。
这是我的表单的 sn-p:
<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(并且项目是在数据库中创建的),但是一旦我保存,我就会转到 URL /api/entry/
,它显示了我的带有 Markdown 的 api。我想让它回到特定的网址。
如果成功,有没有办法自定义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
【问题讨论】:
你能分享你的EntrySerializer
吗?
编辑添加序列化程序
【参考方案1】:
viewsets.ModelViewSet
有一个方法 create
返回 Response
对象。响应对象是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)
【讨论】:
我从没想过重写 create 而是先调用 super。非常棒-非常感谢!! 你知道这是否记录在代码之外的地方吗?以上是关于POST django rest 框架后重定向的主要内容,如果未能解决你的问题,请参考以下文章