如何在 Django 管理面板中查看基于外键值的 ManyToMany 字段的值?

问题描述 投票:0回答:1

我正在为多项选择问答考试制作一个Django应用程序。我创建了一个主题、问题和考试模型,如下所示。

    class Subject(models.Model):
        subject_name = models.CharField(max_length=200, blank=False)
        subject_code = models.IntegerField(blank=False)

    class Question(models.Model):
        subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
        question_name = models.CharField(max_length=200,null=True)

    class Exam(models.Model):
        subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
        questions = models.ManyToManyField(Question)
        date_of_exam = models.DateField(blank=False)
        users = models.ManyToManyField(CustomUser)

在问题中,我通过外键关系连接主题。在考试中,我将主题作为外键,将问题作为问题模型中的多对多关系。

我想从管理面板创建考试。我希望当我选择一个主题时,只有该主题的问题应该显示在多对多字段中以供选择(由于问题具有主题的外键,我认为这应该是可能的)。

(我只想从管理面板而不是模板中执行此操作。)

我怎样才能实现这个目标?非常感谢任何建议。

提前感谢您的建议:)

django django-models many-to-many django-orm
1个回答
0
投票

我能想到的解决方案需要您尝试提交,然后many2many字段将填充与所选主题链接的问题(如果已选择)。

在你的forms.py中

class ExamAdminForm(forms.ModelForm):
    def clean(self):
        cleaned_data = super().clean()
        subject = cleaned_data.get("subject")

        if subject:
            # Adjust the queryset of field2 based on the value of field1
            self.fields["questions"].queryset = Question.objects.filter(subject=subject)

        return cleaned_data

    class Meta:
        model = Exam
        fields = "__all__"

在你的 admin.py 文件中

...

@admin.register(Exam)
class ExamAdmin(admin.ModelAdmin):
    form = ExamAdminForm

© www.soinside.com 2019 - 2024. All rights reserved.