小编rla*_*nte的帖子

如何正确查询ManyToManyField列表中的所有对象(或另一个ManyToManyField)?

我对构建Django查询的最佳方法感到困惑,该查询检查字段(或列表)的所有元素ManyToMany是否存在于另一个ManyToMany字段中.

举个例子,我有几个Person,可以有多个专业.也有Jobs表示人们就可以开始,但他们需要一个或多个Specialtys到有资格被启动.

class Person(models.Model):
    name = models.CharField()
    specialties = models.ManyToManyField('Specialty')

class Specialty(models.Model):
    name = models.CharField()

class Job(models.Model):
    required_specialties = models.ManyToManyField('Specialty')
Run Code Online (Sandbox Code Playgroud)

一个人只有拥有工作所需的所有专业,才能开始工作.所以,再举一个例子,我们有三个专长:

  • 编码
  • 唱歌
  • 跳舞

我有一个Job需要唱歌和舞蹈的专业.有歌唱和舞蹈专业的人可以开始,但另一个有编码和歌唱专业的人不能 - 因为工作需要一个可以唱歌和跳舞的人.

所以,现在我需要一种方法来找到一个人可以承担的所有工作.这是我解决问题的方法,但我确信这是一种更优雅的方法:

def jobs_that_person_can_start(person):
    # we start with all jobs
    jobs = Job.objects.all()
    # find all specialties that this person does not have
    specialties_not_in_person = Specialty.objects.exclude(name__in=[s.name for s in person.specialties])
    # and exclude jobs that require …
Run Code Online (Sandbox Code Playgroud)

django django-orm django-queryset

16
推荐指数
2
解决办法
1万
查看次数

标签 统计

django ×1

django-orm ×1

django-queryset ×1