我正在为多项选择问答考试制作一个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)
在问题中,我通过外键关系连接主题。在考试中,我将主题作为外键,将问题作为问题模型中的多对多关系。
我想从管理面板创建考试。我希望当我选择一个主题时,只有该主题的问题应该显示在多对多字段中以供选择(由于问题具有主题的外键,我认为这应该是可能的)。
(我只想从管理面板而不是模板中执行此操作。)
我怎样才能实现这个目标?非常感谢任何建议。
提前感谢您的建议! :)
我能想到的解决方案需要您尝试提交,然后many2many字段将填充与所选主题链接的问题(如果已选择)。
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.register(Exam)
class ExamAdmin(admin.ModelAdmin):
form = ExamAdminForm