如何使模型与不同模型具有两个外键关系

时间:2015-09-09 03:51:22

标签: python django django-models django-orm

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

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模型具有外键关系。

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

1 个答案:

答案 0 :(得分:0)

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