Django之多对多表之through第三张表之InlineModelAdmin后台内嵌
2024-08-30 21:07:26
话不多说,来看表结构
这里有两个表,一个是阶段表,一个是老师表,一个老师可以带多个阶段,一个阶段也可以由多个老师带,所以是多对多关系
# 阶段表
class Stage(models.Model):
name=models.CharField(
max_length=20,
verbose_name='阶段名称'
)
def __str__(self):
return self.name
class Meta:
verbose_name_plural='阶段'
# 教师表
class Teacher(models.Model):
name=models.CharField(
max_length=20,
verbose_name='教师姓名'
)
stages = models.ManyToManyField( #多对多结构
Stage,
through='Teachstage', #指定第三方表名
# through_fields=('teacher','stage'), #第三方表中必填字段
)
def __str__(self):
return self.name
class Meta:
verbose_name_plural='教师‘
# 第三张表
class Teachstage(models.Model):
teacher=models.ForeignKey(
Teacher,
on_delete=models.CASCADE,
)
stage=models.ForeignKey(
Stage,
on_delete=models.CASCADE
)
level=models.IntegerField( # 在多对多的基础上对每一个关系增添一个字段
verbose_name='阶段代课频数',
default=0,
)
到此,多对多表结构已经创建成功,接下来,我们看看如何让将第三张表内嵌到我们的后台模板中,这里选择的是将第三张表内嵌到Teacher表中,代码如下:
# 在admin.py中
from django.contrib import admin
from teacher.models import Teacher,Teachstage class TeachstageInline(admin.TabularInline):
model = Teachstage @admin.register(Teacher)
class TeacherAdmin(admin.ModelAdmin):
inlines = [
TeachstageInline
]
显如下:
到此结束!
最新文章
- Effeckt.css – CSS3 Transitions &; Animations 精妙应用
- 鸟哥的Linux私房菜第零章
- 作业三--Linux内核分析
- 'vt100': unknown terminal type.
- hdoj 1234 开门人和关门人
- iOS ipv6
- COCI 2015/2016 Day 8 PROKLETNIK
- ABAP常用字符串处理
- python cookbook第三版学习笔记十三:类和对象(三)描述器
- python 集合的操作
- UVA - 12050-Palindrome Numbers
- Grafana简单使用
- AT与ATX电源 - 1 系统状态
- rest_framework之认证源码剖析
- VS插件File Nesting
- Dev_GridView:设置列为Button
- 【学习笔记】--- 老男孩学Python,day5 列表 元祖
- react native 示例代码
- 关于 appium get_attribute --获取对应属性值 API说明
- 开始一个Android的appium实例
热门文章
- MySQL在Linux系统环境的安装和无主机登录配置
- Spring 梳理 - AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)
- Spring boot 官网学习笔记 - 开发第一个Spring boot web应用程序(使用mvn执行、使用jar执行)
- springboot集成Spring Data JPA数据查询
- centos7 远程连接其他服务器mysql
- windows下python和pycharm安装及其使用
- Nebula Graph 技术总监陈恒:图数据库怎么和深度学习框架进行结合?
- 排坑日记之批量从库IO进程停止
- 杂谈:开发人员如何进行复杂业务的学习?让boss刮目相看
- TCP/IP协议介绍