Python Django:ForeignKey筛选表单中选定的数据查询

Python Django:ForeignKey筛选表单中选定的数据查询,python,django,django-models,django-forms,django-templates,Python,Django,Django Models,Django Forms,Django Templates,我正在使用自动结果系统应用程序。我在models.py文件中有五个模型类 class Student(models.Model): std_name=models.CharField('Student Name ', max_length=200) CLASS_NAME=( ('6','SIX'), ('7','SEVEN'), ('8','Eight'), ('9','Nine'), ('10','

我正在使用自动结果系统应用程序。我在models.py文件中有五个模型类

class Student(models.Model):
    std_name=models.CharField('Student Name ', max_length=200)
    CLASS_NAME=(
        ('6','SIX'),
        ('7','SEVEN'),
        ('8','Eight'),
        ('9','Nine'),
        ('10','Ten'),
        ('Ex-10','EX-Ten'),
    )
    std_class_name=models.CharField('Class Name', max_length=7, choices=CLASS_NAME)
    std_roll_number=models.IntegerField('Roll Number')
    GENDER=(
        ('Male','Male'),
        ('Female','Female'),
    )
    std_gender=models.CharField('Gender', max_length=7, choices=GENDER)
    GROUP=(
        ('Science','Science Group'),
        ('B.Studies','Business Group'),
        ('Arts and Humatics','Arts and Humatics'),
        ('General','General'),
    )
    std_group=models.CharField('Group', max_length=17, choices=GROUP)
    pub_date = models.DateTimeField('Published', auto_now_add=True)
    std_total_subject=models.IntegerField('Total Subject', default=0)


    def __str__(self):
        return self.std_name



class ExaminationName(models.Model):
    examination_name=models.CharField('Examination Name ', max_length=100)
    exam_date=models.DateTimeField('Exam Date: ')
    pub_date = models.DateTimeField('Published', auto_now_add=True)


    def __str__(self):
        return self.examination_name

class MainSubject(models.Model):
    main_subject_name = models.CharField('Main Subject Name', max_length=100)
    main_subject_code=models.DecimalField('Main Subject Code', decimal_places=0, default=0, max_digits=10)
    subject_full_marks = models.DecimalField('Subject Full Marks', max_digits=6, decimal_places=0, default=100)
    pub_date = models.DateTimeField('Published', auto_now_add=True)

    def __str__(self):
        return self.main_subject_name



class SubjectName(models.Model):
    mainsubject = models.ForeignKey(MainSubject, on_delete=models.CASCADE)
    subject_name=models.CharField('Subject Name', max_length=100)
    subject_full_marks=models.DecimalField('Subject Full Marks',max_digits=6, decimal_places=0, default=100)
    pub_date = models.DateTimeField('Published', auto_now_add=True)

    subject_gpa_point=models.DecimalField('GPA in Subject',max_digits=4, decimal_places=2, default=0)
    subject_gpa_grade=models.CharField('GPA Grade',max_length=5, default='F')


    def __str__(self):
        return self.subject_name


class SubjectPart(models.Model):
    mainsubject = models.ForeignKey(MainSubject, on_delete=models.CASCADE)
    subjectname = models.ForeignKey(SubjectName, on_delete=models.CASCADE)
    subject_part_name=models.CharField('Subject Part', max_length=100)
    subject_part_full_marks = models.DecimalField('Full Marks', max_digits=6, decimal_places=0, default=100)
    subject_part_pass_marks = models.DecimalField('Pass Marks', max_digits=6, decimal_places=0, default=100)
    pub_date = models.DateTimeField('Published', auto_now_add=True)


    def __str__(self):
        return self.subject_part_name






class AddResult(models.Model):
    student=models.ForeignKey(Student, on_delete=models.CASCADE)
    examinationname = models.ForeignKey(ExaminationName, on_delete=models.CASCADE)
    mainsubject_name = models.ForeignKey(MainSubject, on_delete=models.CASCADE)
    subjectname = models.ForeignKey(SubjectName, on_delete=models.CASCADE)
    subjectpart = models.ForeignKey(SubjectPart, on_delete=models.CASCADE)
    subject_number=models.DecimalField('Subject Number', max_digits=6, decimal_places=0)
    pub_date = models.DateTimeField('Published', auto_now_add=True)


    def __str__(self):
        return str(self.subjectpart)

    def fail_sub(self):
        if self.subject_number < self.subjectpart.subject_part_pass_marks:
            return 'F'
班级学生(models.Model):
std_name=models.CharField('Student name',max_length=200)
类名=(
(‘6’,‘6’),
("7","7"),,
(‘8’,‘8’),
(‘9’,‘9’),
(‘10’,‘10’),
('Ex-10','Ex-10'),
)
std_class_name=models.CharField('class name',max_length=7,choices=class_name)
标准卷号=型号。整型字段(“卷号”)
性别=(
(‘男性’,‘男性’),
(‘女性’,‘女性’),
)
std_gender=models.CharField('gender',max_length=7,choices=gender)
团体=(
(“科学”、“科学小组”),
('B.Studies','Business Group'),
(“艺术与人类”,“艺术与人类”),
(“一般”、“一般”),
)
std_group=models.CharField('group',max_length=17,choices=group)
pub\u date=models.DateTimeField('Published',auto\u now\u add=True)
std\u total\u subject=models.IntegerField('total subject',默认值=0)
定义(自我):
返回self.std_名称
类别检查名称(models.Model):
检查名称=models.CharField('检查名称',最大长度=100)
检查日期=models.datetime字段('检查日期:')
pub\u date=models.DateTimeField('Published',auto\u now\u add=True)
定义(自我):
返回自检名称
类主主题(models.Model):
main_subject_name=models.CharField('main subject name',max_length=100)
主主题代码=models.DecimalField('主主题代码',小数位=0,默认值=0,最大位数=10)
主题满分=models.DecimalField('主题满分',最大数字=6,小数位数=0,默认值=100)
pub\u date=models.DateTimeField('Published',auto\u now\u add=True)
定义(自我):
返回self.main\u subject\u名称
类SubjectName(models.Model):
mainsubject=models.ForeignKey(mainsubject,on_delete=models.CASCADE)
主题名称=models.CharField('主题名称',最大长度=100)
主题满分=models.DecimalField('主题满分',最大数字=6,小数位数=0,默认值=100)
pub\u date=models.DateTimeField('Published',auto\u now\u add=True)
subject\u gpa\u point=models.DecimalField('subject中的gpa',最大数字=4,小数位数=2,默认值=0)
subject\u gpa\u grade=models.CharField('gpa grade',max\u length=5,默认值为'F')
定义(自我):
返回self.subject\u名称
类主题部分(models.Model):
mainsubject=models.ForeignKey(mainsubject,on_delete=models.CASCADE)
subjectname=models.ForeignKey(subjectname,on_delete=models.CASCADE)
主题部分名称=models.CharField('主题部分',最大长度=100)
subject\u part\u full\u marks=models.DecimalField('满分',最大数字=6,小数位数=0,默认值=100)
主题\部分\通过\分数=型号。小数字段('通过分数',最大数字=6,小数位数=0,默认值=100)
pub\u date=models.DateTimeField('Published',auto\u now\u add=True)
定义(自我):
返回self.subject\u part\u name
类AddResult(models.Model):
学生=models.ForeignKey(学生,on_delete=models.CASCADE)
检查名称=models.ForeignKey(检查名称,on_delete=models.CASCADE)
mainsubject\u name=models.ForeignKey(mainsubject,on\u delete=models.CASCADE)
subjectname=models.ForeignKey(subjectname,on_delete=models.CASCADE)
subjectpart=models.ForeignKey(subjectpart,on_delete=models.CASCADE)
主题编号=型号。小数字段('主题编号',最大数字=6,小数位数=0)
pub\u date=models.DateTimeField('Published',auto\u now\u add=True)
定义(自我):
返回str(self.subjectpart)
def fail_分接头(自身):
如果self.subject\u编号
我已经通过Django管理面板创建了一个MainSubject对象。我通过foreignkey在SubjectName模型类中添加了主主题。 我在SubjectName模型类中创建了两个外键。我通过Django管理面板在SubjectPart模型中创建了任何对象,如下所示

然后我创建了一个AddResultFormModelForm。但问题是当我选择主题名时,所有的主题都显示了那个时间。若我选择孟加拉语作为主要主题,那个么我只选择了主题名称部分中的孟加拉语第一部分或孟加拉语第二部分。但现在以这种形式展示了所有的主题。
如何在Django表单中实现我的想法?

在Django中,您可以筛选选择集,但在前端交互中,您可能需要重新实现表单模板html代码或表单字段。

为此,您应该在admin.py中编写方法

您可以为模型(主题部分)创建一个类,并为字段实现一个方法

您可以参考此

——这两个答案可能会对您有所帮助。如果你还有疑问,请告诉我。