Django外键选择

时间:2017-07-07 19:12:38

标签: python django foreign-keys

我正在制作一个简单的Django应用程序,记录跑步运动员的表现。该应用程序的模型如下所示:

class Athlete(models.Model):
    name = models.CharField(max_length=30)
    nationality = models.CharField(max_length=30)

class TrainingSession(models.Model):
    training_date = models.DateTimeField()
    location = models.CharField(max_length=30)
    athlete = models.ForeignKey(Athlete)

class Run(models.Model):
    run_time = models.IntegerField()
    training = models.ForeignKey(TrainingSession)

运动员有多个训练课程,在每个训练课程中,运动员多次跑步(每次,他的时间将以秒记录)。

我发现我可以轻松地在这些模型之间进行查询,但是,我仍然在努力解决以下问题: 我想选择一致运行的跑步者,例如20到30秒。当我选择这样的跑步者时:

athletes = Athlete.filter(trainingsession__run__run_time__range=[20,30]).distinct()

我让所有曾经跑过20到30秒的运动员,以及曾经跑过35秒的运动员。你能帮帮我解决这个问题吗?希望有一个Django查询让这很容易!

2 个答案:

答案 0 :(得分:2)

您可以在 A B C D E R1 -0.434836671 -0.108772638 -0.000674938 -0.333749912 -0.608165885 R2 -0.072168631 -0.285296255 0.024473 -0.326715632 -0.882788114 R3 -0.54414254 -0.269099509 -0.016684508 -0.028660542 -0.236927454 R4 -0.762881846 -0.054663207 -0.016672169 -0.038475666 -0.462750221 R5 -0.079776401 -0.176689481 0.087003362 0.131840424 0.109491763 R6 -0.172537433 -0.092644342 0.015477811 0.027402294 0.078664283 R7 -0.422822576 -0.105579631 -0.03750016 0.003756128 -0.014107015 R8 -0.27263471 0.032882775 -0.076755456 0.042560642 0.013867512 R9 -0.149443092 0.03019628 -0.039934703 -0.003320687 -0.205039037 R10 0.106705796 -0.027710203 0.089172743 -0.068607332 0.121851149 <20秒内找到另外一个运动员查询集,并将其从>30查询集中排除。你可以使用Q() 执行athletes查询。

OR

答案 1 :(得分:0)

Q对象可以帮助构建更复杂的查询: https://docs.djangoproject.com/en/1.11/topics/db/queries/#complex-lookups-with-q-objects

也许是这样的:

athletes = Athlete.filter(
    Q(trainingsession__run__run_time__gt=20) & 
    Q(trainingsession__run__run_time__lt=30)).distinct()

使用.distinct()时也有一些问题。订单扮演一个角色,您可以指定要区分的字段。 请参阅文档:https://docs.djangoproject.com/en/1.11/ref/models/querysets/#django.db.models.query.QuerySet.distinct