python - Django: ForeignKey Filter 查询Form中选中的数据

标签 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','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'

我已经通过 Django 管理面板创建了一个 MainSubject 对象。我通过外键在 SubjectName 模型类中添加了主要主题。 我在 SubjectName 模型类中创建了两个外键。我通过这样的 Django 管理面板在 SubjectPart 模型中创建了任何对象。

enter image description here

然后我创建了一个 AddResulForm ModelForm。但问题是当我选择主题名称时,所有主题都会显示那个时间。如果我选择 Bangla 作为 Main subject,那么我在 Subject Name Part 中只选择 Bangla First Part 或 Bangla 2nd Part。但是现在以这种形式显示所有主题。 如何在 Django 表单中实现我的想法?

最佳答案

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

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

可以引用这个https://docs.djangoproject.com/en/1.11/ref/contrib/admin/

关于python - Django: ForeignKey Filter 查询Form中选中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47137992/

相关文章:

MySQL合并多个表的数据

python - Django不会在try except语句中重定向到404

python - 获取 Django 模型字段的 Python 类型?

python - 将定位器存储在变量中

python - Django 2.1 startproject 抛出奇怪的错误

python - Django 查询集 : filtering by related item manager

django - 如何在 Django 中将 2 个属性一起设置为主键?

python - IO错误: [Errno socket error] using BeautifulSoup

python - 如何在 Anaconda (Windows 10) 上安装 textract?

python - 错误为 "invalid literal for int() with base 10"的查询字符串