You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django-Rest-Framework ModelViewSet创建视图异常:提交失败且报404错误

问题分析与解决方案

首先咱们来定位核心问题:你的URL配置和请求方式不匹配DRF的RESTful路由规则,导致/api/create/是无效路径,提交时触发404错误。

为什么会出现404?

你在articles/api/urls.py里用DefaultRouter注册了空字符串路由:

router.register(r'', ArticleViewSet, base_name='articles')

DRF的DefaultRouter会自动为ModelViewSet生成标准REST路由:

  • GET /api/:获取文章列表
  • POST /api/:创建新文章(这才是你需要的创建接口)
  • GET /api/<pk>/:获取单篇文章详情
  • PUT/PATCH /api/<pk>/:更新单篇文章
  • DELETE /api/<pk>/:删除单篇文章

你访问的/api/create/并不是DRF自动生成的路由,所以GET请求返回404;同时你用PUT请求提交创建表单也是错误的——PUT是用来更新已有资源的,创建新资源应该用POST请求。

具体解决步骤

1. 修正前端表单的提交配置

把创建表单的:

  • 提交路径从/api/create/改成/api/
  • 请求方法从PUT改成POST

这样表单提交时就会命中DRF自动生成的创建接口,数据就能正常存入数据库了。

2. (可选)如果一定要用/api/create/路径

如果你坚持想要自定义/api/create/路径,可以在articles/api/urls.py里手动添加路由,单独映射创建视图:

from articles.api.views import ArticleViewSet
from rest_framework.routers import DefaultRouter
from django.urls import path

router = DefaultRouter()
router.register(r'', ArticleViewSet, base_name='articles')

# 手动添加创建路径
urlpatterns = router.urls + [
    path('create/', ArticleViewSet.as_view({'post': 'create'}), name='article-create'),
]

不过更推荐遵循DRF的RESTful规范,直接用默认的POST /api/来创建资源,这样更符合行业通用的API设计习惯。

额外验证

你提到列表视图下方的新增表单能正常提交,那是因为那个表单应该是直接提交到/api/(POST请求),和DRF的路由匹配上了,所以能正常工作。你只需要把单独的/api/create/页面的表单配置改成一样的就行。

内容的提问来源于stack exchange,提问作者naccode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:11:52