2011-04-14 152 views
0

我正在使用Django。我有一個夾具模型,它看起來像:Django:與同一類型的多個相關字段的模型

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相關團隊:

my_team.home_fixture_set.all() 

我可以類似地訪問「離開」燈具。但是,我不知道如何將兩者結合起來,並獲得該球隊參與的所有裝置的列表?例如:

my_team.home_and_away_fixture_set.all() 

注意home_and_away_fixture_set必須返回一個QuerySet,這樣我可以在其上進行過濾:

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

是否有可能通過模型​​查詢API來做到這一點?如果沒有,是否可以通過Manager.raw()查詢合理輕鬆地完成此操作?

感謝 周杰倫

回答

2
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:單查詢以及

+0

您的答案都產生相同的*單*查詢。不要忘記,查詢集是懶惰的,所以在你的第二個例子中生成的兩個查詢集在評估之前一起進行OR運算。 – shadfc 2011-04-14 22:59:07

+0

@shadfc感謝您的收穫。看起來他們在這種情況下產生完全相同的SQL。 – DTing 2011-04-15 00:16:33

+0

謝謝你們,我會給上述方法一個去 - 它看起來好像這將做我剛纔的東西:) – 2011-04-15 09:31:01

相關問題