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

Django如何重写CreateView通过url slug参数动态指定model和form

Django类视图根据URL参数动态匹配模型与表单的实现方案

需要重写的核心方法

你需要重写CreateView内置的get_model()和get_form_class()两个方法,既符合Django类视图的设计规范,也不需要修改原有视图的核心执行流程。
完整代码示例如下:

from django.http import Http404
from django.views.generic.edit import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
from tables.models import subcomponentsTable, rawMaterialsTable
from tables.forms import subcomponentsTableForm, rawMaterialsTableForm

class createTableView(LoginRequiredMixin, CreateView):
    template_name = 'tables/createTableTemplate.html'
    # 定义URL参数slug和模型、表单的映射关系,新增类型直接扩展该字典即可
    table_type_map = {
        "equipment": {
            "model": subcomponentsTable,
            "form_class": subcomponentsTableForm
        },
        "raw-material": {
            "model": rawMaterialsTable,
            "form_class": rawMaterialsTableForm
        }
    }

    def get_model(self):
        # 从URL参数中获取tableType
        table_type = self.kwargs.get("tableType")
        if table_type not in self.table_type_map:
            raise Http404("请求的表格类型不存在")
        return self.table_type_map[table_type]["model"]

    def get_form_class(self):
        table_type = self.kwargs.get("tableType")
        return self.table_type_map[table_type]["form_class"]

适配UpdateView、DeleteView的差异

该逻辑可以快速复用在UpdateView和DeleteView上,仅存在两点小差异:

  • DeleteView不需要渲染和处理表单,因此不需要重写get_form_class()方法,仅保留get_model()的匹配逻辑即可
  • UpdateView和DeleteView需要操作指定的单条数据,所以对应的URL需要额外增加主键(pk)或唯一slug参数,示例如下:
    urlpatterns = [
        # 新增实例路由
        path('new/<slug:tableType>', views.createTableView.as_view(), name='newInstance'),
        # 编辑实例路由,新增pk参数
        path('edit/<slug:tableType>/<int:pk>', views.updateTableView.as_view(), name='editInstance'),
        # 删除实例路由,新增pk参数
        path('delete/<slug:tableType>/<int:pk>', views.deleteTableView.as_view(), name='deleteInstance'),
    ]
    

除以上两点外,核心的类型匹配逻辑完全通用,不需要额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:06