繁体   English   中英

如何建立一个具有不同模型的两个外键关系的模型

[英]How to make a model having two foreign Key relations with the different models

我制作了一个应用,其中制作了以下三个模型:

from django.db import models

class Class_Mgmt(models.Model):
    class_name = models.CharField(max_length=8,null=False,blank=False)

    def __str__(self):
        return self.class_name


class Section_Mgmt(models.Model):
    stu_class=models.ForeignKey(Class_Mgmt)
    section_name=models.CharField(max_length=1,null=False,blank=False)

    def __str__(self):
        return self.section_name

class Teacher_Mgmt(models.Model):
    teacher_name=models.CharField(max_length=50,null=False,blank=False)
    tea_class=models.ForeignKey(Class_Mgmt)
    tea_section=models.ForeignKey(Section_Mgmt)

    def __str__(self):
        return self.teacher_name

在这里, Section_Mgmt类与Class_Mgmt有一个ForeignKey关系,这意味着当我运行项目并添加新的section_name ,将从所有现有类的下拉列表中选择class_name 在该项目中运行良好。 但是,在Teacher_Mgmt模型中,我想这样做:当我在表单中输入新老师时,然后从下拉列表中选择现有班级时,它将仅显示所选班级中可用的部分,因为, section_Mgmt模型也与class_Mgmt模型具有外键关系。

目前,当我运行该项目并输入新老师,并从显示所有现有班级的下拉列表中选择一个班级时,则将显示所有节,而不是仅显示该班级中可用的那些节。

Django没有内置此功能,但是您可以使用django-smart-selects 只需安装此库,然后将Teacher_Mgmt更改为以下代码:

from smart_selects.db_fields import ChainedForeignKey 

class Teacher_Mgmt(models.Model):
    teacher_name=models.CharField(max_length=50,null=False,blank=False)
    tea_class=models.ForeignKey(Class_Mgmt)

    tea_section=ChainedForeignKey(
        Section_Mgmt, 
        chained_field="tea_class",
        chained_model_field="tea_class", 
        show_all=False, 
        auto_choose=True
    )

    def __str__(self):
        return self.teacher_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM