【问题标题】:Django: model with multiple related fields of the same typeDjango:具有多个相同类型相关字段的模型
【发布时间】:2011-08-05 21:42:31
【问题描述】:

我正在使用 Django。我有一个 Fixture 模型,看起来像:

class Fixture(models.Model):
    home_team = models.ForeignKey(Team, related_name="home_fixture_set")
    home_score = models.IntegerField(max_length=2, blank=True, null=True)
    away_team = models.ForeignKey(Team, related_name="away_fixture_set")
    away_score = models.IntegerField(max_length=2, blank=True, null=True)
    when = models.DateTimeField()

我的团队模型看起来像:

class Team(models.Model):
    name = models.CharField(max_length=60)
    club = models.ForeignKey(Club)

我可以通过 home_fixture_set related_name 访问特定球队的“主场”赛程列表:

my_team.home_fixture_set.all()

我可以类似地访问“离开”装置。但是,我不知道如何将两者结合起来并获得这支球队参与的所有赛程的列表?例如:

my_team.home_and_away_fixture_set.all()

请注意 home_and_away_fixture_set 必须返回一个查询集,以便我可以对其进行过滤:

my_team.home_and_away_fixture_set.filter(when__lte=datetime.datetime.now())

是否可以通过模型查询 API 做到这一点?如果没有,是否可以通过 Manager.raw() 查询相当容易地完成此操作?

谢谢 周杰伦

【问题讨论】:

    标签: django api model


    【解决方案1】:
    from django.db.models import Q
    home_and_away_fixtures = Fixtures.objects.filter(Q(home_team=team)|Q(away_team=team))
    

    编辑

    home_and_away_fixtures = my_team.home_fixture_set.all() | my_team.away_fixture_set.all()
    

    thx shadfc: 也是单查询

    【讨论】:

    • 您的答案都产生相同的single 查询。不要忘记查询集是惰性的,因此在第二个示例中生成的两个查询集在评估之前是 OR'd 在一起的。
    • @shadfc 感谢您的关注。看起来他们在这种情况下产生了完全相同的 SQL。
    • 谢谢大家,我会尝试上述方法 - 看起来这确实可以满足我的需求:)
    猜你喜欢
    • 2019-08-17
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2012-12-24
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    相关资源
    最近更新 更多