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 ]
显如下:

到此结束!

浙公网安备 33010602011771号