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

能否自动创建Django模型实现技能关联幻灯片数据存储需求?

实现方案

首先你不需要为每个新增的技能单独创建数据表,这种动态建表的方式违反数据库设计的范式原则,后续维护、数据查询、版本迁移都会产生大量额外成本,用Django自带的一对多外键关联就能完全满足需求。

步骤1:新增幻灯片模型关联技能表

在你的models.py中新增SkillSlide模型,通过外键和原有Skills模型绑定:

from django.db import models


class Skills(models.Model):
    name = models.CharField(max_length=50)
    level = models.DecimalField(max_digits=3, decimal_places=3)
    def __str__(self):
        return self.name

# 新增幻灯片模型
class SkillSlide(models.Model):
    # 关联对应技能,技能删除时同步删除所属的幻灯片
    skill = models.ForeignKey(Skills, on_delete=models.CASCADE, related_name='slides')
    image = models.ImageField(upload_to='skill_slides/')
    description = models.TextField(blank=True)
    
    def __str__(self):
        return f"{self.skill.name}的幻灯片{self.id}"

步骤2:配置Admin后台实现技能编辑页直接管理幻灯片

修改admin.py,用Django的内联管理功能,无需单独切换页面就能在技能的编辑/新增页面直接添加、修改、删除对应幻灯片:

from django.contrib import admin
from .models import Skills, SkillSlide

# 定义幻灯片内联组件
class SkillSlideInline(admin.StackedInline):
    model = SkillSlide
    # 首次加载时默认显示1个空的幻灯片上传位
    extra = 1

@admin.register(Skills)
class SkillsAdmin(admin.ModelAdmin):
    # 将幻灯片内联组件注册到技能管理页
    inlines = [SkillSlideInline]

# 如果不需要单独管理幻灯片表可以注释掉下面这行
# admin.site.register(SkillSlide)

额外配置提示

  • 要正常使用ImageField需要在项目配置文件中设置MEDIA_ROOT和MEDIA_URL,同时在开发环境的路由中配置媒体资源的访问路径
  • 前端查询单个技能的所有幻灯片时,可以通过技能实例.slides.all()直接获取所有关联的幻灯片数据
  • 如果需要限制每个技能的幻灯片最大数量,可以在SkillSlideInline中添加max_num参数配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:54:07