このような何か:クエリセットフィルタ(複数の1対多の関係を)
class Team(models.Model):
name = models.CharField()
class TeamPosition(models.Model):
description = models.CharField()
team = models.ForeignKey(Team)
class Player(models.Model):
teamposition = models.ForeignKey(TeamPosition)
team = models.ForeignKey(Team)
joined_date = models.DateField()
left_date = models.DateField(blank=True, null=True)
person = models.ForeignKey(Person)
class Person(models.Model):
name = models.CharField()
I
私がTeamPositionオブジェクトから開始すると、わかりやすくなります(ただし、私にチームのクエリセットは与えません)。
サンプルデータセット:
オブジェクトセット1:
Team(name="Apples")
TeamPosition(team="Apples", description="Forward")
Player(team="Apples", teamposition="Forward", joined_date="2014-01-01", left_date=null, person="Bob")
TeamPosition(team="Apples", description="Defense")
Player(team="Apples", teamposition="Defense", joined_date="2014-01-01", left_date=2015-01-01, person="John")
Player(team="Apples", teamposition="Defense", joined_date="2015-01-01", left_date=2017-01-01, person="Paul")
TeamPosition(team="Apples", description="Goalie")
Player(team="Apples", teamposition="Goalie", joined_date="2014-01-01", left_date=2015-01-01, person="Jane")
オブジェクトセット2:
Team(name="Pears")
TeamPosition(team="Pears", description="Forward")
Player(team="Pears", teamposition="Forward", joined_date="2014-01-01", left_date=null, person="Carol")
TeamPosition(team="Pears", description="Defense")
Player(team="Pears", teamposition="Defense", joined_date="2015-01-01", left_date=2017-01-01, person="Bill")
TeamPosition(team="Pears", description="Goalie")
Player(team="Pears", teamposition="Goalie", joined_date="2014-01-01", left_date=null, person="Susan")
オブジェクトセット3:
Team(name="Oranges")
TeamPosition(team="Oranges", description="Forward")
TeamPosition(team="Oranges", description="Forward")
TeamPosition(team="Oranges", description="Goalie")
オブジェクトセット4:
チームが利用可能TeamPositionsを持って:
Team(name="Bananas") TeamPosition(team="Bananas", description="Forward") Player(team="Bananas", teamposition="Forward", joined_date="2014-01-01", left_date=null, person="Joe") TeamPosition(team="Bananas", description="Defense") Player(team="Bananas", teamposition="Defense", joined_date="2015-01-01", left_date=2017-01-01, person="Angela") TeamPosition(team="Bananas", description="Goalie") Player(team="Bananas", teamposition="Goalie", joined_date="2014-01-01", left_date="2016-09-30", person="Kelly")
だからそれらのオブジェクトに基づいて、私は次のような結果を期待しますか? (現在のプレーヤーなしTeamPositionを意味可能)
チームは、現在のプレーヤーとの完全なすべてのTeamPositionsを持ってQueryset should return Object 1 (Apples) and Object 3 (Oranges)
?チームは30日に空TeamPositionを持つことになります(上記の反対側)(現在の意味、将来的に何left_dateやleft_dateのいずれかを持っていないプレイヤー)
Queryset should return Object 2 (Pears) and Object 4 (Bananas)
?それがより明確になります
Queryset should return Object 4 (Bananas)
うまくいけば。
注:以前の車の例(したがって、最初の応答を)持っていたが、不明ではそう
。私はこれを試してみる..! – Programming123
Ranはクイックテストで、正確な= ''を削除しました(ダンゴが私に思い出させる空白の場合、日付はいつもヌルです)、distinct()を追加しました。しかし、私はすべてのテスト対象を元に戻してしまいました。私は私の質問を編集して、より明確な別のクラスのクラスを追加しています。 – Programming123
なぜそのクエリが機能しないのかわかりません。私はとにかく私の答えを更新しました。 2番目の例の意味で、「どのチームに現在のプレーヤーがないTeamPositionsがないのですか」を明確にすることはできますか? – vabada