Django模型中的Many2Many关系:由一组成员过滤

时间:2016-09-16 16:31:14

标签: python django django-models

我有这些模特:

class Skill(models.Model):
    name = models.CharField(max_length=20)


class Engineer(models.Model):
    name = models.CharField(max_length=20)
    skill = models.ManyToManyField(Skill)
    city = models.ForeignKey(City)


class City(models.Model):
    city = models.CharField(max_length=20)

我有2个问题,请您抽出时间来帮助我。谢谢:))

1)我想通过一组技能过滤工程师。 让我们说我需要过滤具有这些技能的工程师[' HTML'' python'' CSS']。我怎样才能做到这一点?

2)我想通过特定领域的一组技能 AND 来过滤工程师。 让我们说我需要过滤具有这些技能的工程师[' HTML'' python',' CSS'] AND 这位工程师必须住在阿纳海姆。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

您应该阅读 queries that span relationships 部分文档。基本上查询是使用与 ForeignKey 查找相同的语法完成的。 (如果你不使用m2m through

此外, Engineer City 之间没有任何关系,如果您希望能够回答第二个问题之类的查询,则需要从工程师添加 ForeignKey City

1

skills = Skill.objects.filter(name__in=['HTML', 'Python', 'Css'])
engineers = Engineer.objects.filter(skill__in=skills)

2

city = City.objects.get(name='Anaheim')
engineers = Engineer.objects.filter(skill__in=skills, city=city) # Considering you put a ForeignKey from Engineer to City