我爲我的網站使用Django,因此決定使用Django Rest Framework來構建我的REST API。但是,當我加入表格時,我有一個共同的問題。如果連接在直接外鍵上定義,則一切正常。然而,當連接被定義在非直接外鍵字段上時,事情就會變得不合時宜。Django Rest Framework在非外鍵字段上連接2個表
例如,我在一個表中存儲玩家的統計數據。 (統計表有1個Fk - >球員) 我存儲參與者在另一個表中的比賽(此表有2個FK - >球員,比賽)
如果我檢索玩家元數據的統計信息,一切工作正常。但是我想在給定的比賽中檢索所有球員的統計數據。
在SQL中,我可以加入參與者表與玩家id(常見的fk,但兩個表之間沒有直接鏈接,就Django而言,即沒有定義在2個表的單個模型上)的參與者表和然後過濾競爭。
select a.* from Stats a inner join Participants b on a.player = b.player where competition = '%s'
如何使用Django對象語法複製它?我想將其轉換爲:
Stats.objects.filter(stats__competition = %s)
到目前爲止,我一直在使用原始SQL作爲解決方法。不過,我想轉向更持久的解決方案。
有什麼建議嗎?如果遷移很簡單,並且這個連接問題很容易解決,我願意轉移到另一個REST框架(遠離Django REST)。
編輯:添加簡約模型:
class Stats(models.Model):
player = models.ForeignKey(Player, related_name='stats_player')
... (other fields)
class Participants(models.Model):
player = models.ForeignKey(Player, related_name='participant_player')
competition = models.ForeignKey(Competition, related_name='participant_competition')
我添加了簡約的機型。您的解決方案沒有爲球員的典範工作沒有競爭的領域...如果你使用 – Shubham
播放模式不需要比賽場ManyToManyField。通過參數,您的參與者表可以被ManyToManyField使用。見https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ManyToManyField – pchiquet
不錯..我認爲你的修改答案應該工作..但我目前陷入了一個週期性的進口問題..(感謝在各種文件中拆分我的模型以獲取所需的模式名稱!) – Shubham