【发布时间】:2019-09-28 07:11:30
【问题描述】:
我有一个 Django 项目,我在其中制作了 3 个不同的应用程序:“博客”、“用户”、“api”。 这是一个可以使用模型 Post 发布消息的网站。我想使用 Django Rest API 来访问模型。它可以工作,但它与“博客”的 UpdateView 和 DeleteView 的一些重定向相混淆。 我认为使用 DefaultRouter() 可能有问题?
当我尝试使用我的 blog/PostupdateView blog/PostDeleteView(继承自 UpdateView 和 DeleteView)视图时,我不断被重定向到 /api/blog/postid/ 而不仅仅是访问我的 detailView路径应该只是 /blog/postid/ 我不知道为什么。
我的帖子模型:
class Post(models.Model):
...
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
我的序列化器:
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('id', 'title', 'content', 'date_posted', 'author', 'rooms')
我的帖子 api 视图:
class PostView(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
我的网址文件:
主 urls.py:
urlpatterns = [
...
path('', include('blog.urls')),
path('api/',include('api.urls')),
]
博客/urls.py:
urlpatterns = [
...
path('post/<int:pk>/', PostDetailView.as_view(),name='post-detail'),
path('post/new/', PostCreateView.as_view(),name='post-create'),
...
]
api/urls.py:
router = routers.DefaultRouter()
router.register('post', views.PostView)
urlpatterns = [
path('',include(router.urls))
]
我在 blog/views.py 中的 PostCreateView
class PostCreateView( LoginRequiredMixin, UserPassesTestMixin, CreateView):
model = Post
fields = ['title', 'content', 'rooms']
def test_func(self):
...
def get_form(self, form_class=None):
...
def form_valid(self, form):
...
当使用 PostCreateView 时,我应该被重定向到创建的 Post 的详细视图,正如 Post 模型中定义的那样。相反,我被重定向到由路由器在 api/urls.py 中生成的 api url
【问题讨论】:
标签: python django django-rest-framework url-redirection django-rest-viewsets