django - 我怎样才能只写一个 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:抱歉英语不好:)
解决方案
您可以使用双下划线来遍历关系并__in
测试多个SportType
s。
results = Fitness.objects.filter(sport_type_set__sport_type__in=[s1, s2])
推荐阅读
- python - 好奇地不适用于更大的 pandas.DataFrame 的功能
- python - 如何在 python 中正确地将参数和整数插入到我的函数中?
- typescript - 如何避免使用 fs-extra.copySync 方法复制 .txt 和 .xml 文件类型
- python - 将文本文件排序到每个新行的列表中,找到最大值并打印它所在的行号
- javascript - Google Script Failing --- TypeError: Cannot read property "length" from undefined
- bash - 在程序以状态退出后执行 EXIT 陷阱时的 Bash 函数范围状态!= 0 (set -e)
- python - 每次我想从多个 python 版本中使用 python3 时都需要取消设置 PYTHONPATH
- python - DynamoDB 获取不同的属性
- ios - 在数组数组中查找值
- jquery - jQuery 编辑的 Bootstrap datetimepicker 没有出现