Django 中属性的布尔组合

Boolean combination of attributes in Django

我正在使用 Django 概述大学课程与高中科目要求之间的关系。

目前我有以下型号:

class Course(models.Model):
   title = models.CharField(max_length=100)    #(e.g. Bachelor of _____)
   ft_years = models.SmallPositiveIntegerField()    #years of full time study

class Requirement(models.Model):    
   subject = models.CharField(max_length=50)    #(e.g. Mathematics 3)
   score = models.DecimalField(max_digits=3)    #(e.g. 70)       
   percent = models.NullBooleanField()    #True if score is in percent

我的问题是,如何向每门课程添加 Requirement 的布尔组合?

例如:

A Bachelor of Physics (Course) has the following Requirements:
(70% in Physics) AND (50% in Mathematics 3 OR 45% in Mathematics 4)


附加信息:因为几门课程可能有相同的要求(例如物理中的 70%),但每门课程可能有几个要求,我打算使用 m2m 模型。

你可以制作一个 CompoundRequirement,它有一些要求,它 OR 在一起(与 ManyToManyField)然后每个 class 有一些 Requirements 和一些 CompoundRequirements。 AND 由多个要求处理,因此您只需要处理 OR。