Django之多对多表之through第三张表之InlineModelAdmin后台内嵌

话不多说,来看表结构

这里有两个表,一个是阶段表,一个是老师表,一个老师可以带多个阶段,一个阶段也可以由多个老师带,所以是多对多关系

# 阶段表
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
    ]

显如下:

 

到此结束!

posted @ 2019-08-20 14:22  倒旦田头  阅读(624)  评论(0)    收藏  举报