首页 > 解决方案 > 我怎样才能只写一个 django orm 查询?

问题描述

目标是通过指定的SportType 对象过滤Fitness 对象,即所有包含至少一个指定SportType 对象作为外键的Fitness 对象。

这是我的模型和示例:

class Fitness(models.Model):
  name = models.Charfield(max_length=100)

class SportType(models.Model):
  name = models.CharField(max_length=100)

class FitnessSportType(models.Model):
  fitness = models.ForeignKey(Fitness, related_name='sport_type_set')
  sport_type = models.ForeignKey(SportType, related_name='fitness_set')

f1 = Fitness.objects.create(name='foo')
f2 = Fitness.objects.create(name='bar')
f3 = Fitness.objects.create(name='goo')
s1 = SportType.objects.create(name='a')
s2 = SportType.objects.create(name='b')
s3 = SportType.objects.create(name='c')
FitnessSportType.objects.create(fitness=f1, sport_type=s1)
FitnessSportType.objects.create(fitness=f1, sport_type=s2)
FitnessSportType.objects.create(fitness=f2, sport_type=s1)
FitnessSportType.objects.create(fitness=f2, sport_type=s3)
FitnessSportType.objects.create(fitness=f3, sport_type=s2)
SOME_MAGIC_FUNCTION([s1, s3]) = [f1, f2]

PS:抱歉英语不好:)

标签: djangoorm

解决方案


您可以使用双下划线来遍历关系并__in测试多个SportTypes。

results = Fitness.objects.filter(sport_type_set__sport_type__in=[s1, s2])


推荐阅读