gpt4 book ai didi

django - POST django rest 框架后重定向

转载 作者:行者123 更新时间:2023-12-04 17:15:55 26 4
gpt4 key购买 nike

我正在通过 django 表单向我的 Django Rest Framework api 提交一个 POST 请求。

这是我的表单的一个片段:

<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)

我正在成功发布(并且项目在数据库中创建),但是一旦我保存,我就会转到 url /api/entry/这显示了我的 api w/Markdown。我想让它回到特定的网址。

有没有办法自定义 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

最佳答案

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)

关于django - POST django rest 框架后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46894155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com