[英]Django query an object only if all ManyToMany fields match dict
[英]Django: How to query objects where manytomany fields ALL exist in a list?
我想獲取所有相關prereq_courses存在於提供的列表中的程序(稱為course_codes)。 因此,我不希望包含該列表中不存在的prereq_courses的程序。 我怎么做?
models.py
class Course(models.Model):
name = models.CharField(max_length=255, blank=True)
code = models.CharField(max_length=64, blank=True, unique=True)
class Prerequisite(models.Model):
program = models.ForeignKey('Program', on_delete=models.CASCADE)
course = models.ForeignKey('Course', on_delete=models.CASCADE, null=True)
group = models.IntegerField(null=True, default=0)
class Program(models.Model):
name = models.CharField(max_length=255)
prereq_courses = models.ManyToManyField(Course, through=Prerequisite)
我嘗試了以下操作,但是它也給了我一些程序,這些程序包括在course_codes列表中不存在的prereq_courses。
for code in course_codes:
eligible_progs = eligible_progs.filter(prereq_courses__code=code)
我在文檔中找到了解決方案
為了測試列表中所有課程的存在,我基本上必須反向進行。 所以首先,我得到了所有UNTAKEN課程的查詢集。 然后,我排除了具有必修課程的程序,這些程序是未選課程查詢集中的一部分。 我添加了另一個參數,因此不得不使用filter()操作。 它像魅力一樣運作。
not_taken_courses = Course.objects.exclude(code__in=course_codes)
eligible_programs = eligible_progs.exclude(
prerequisite__in=Prerequisite.objects.filter(
course__in=not_taken_courses, relation_type = "Alone",
),
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.