亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用單個 INNER JOIN 從多個表中獲取值,例如 Django 中的查詢

使用單個 INNER JOIN 從多個表中獲取值,例如 Django 中的查詢

Cats萌萌 2023-02-07 16:41:24
我正在嘗試在 Django 中創建一個簡單的 Hangman 游戲。我有兩個模型,一個用于單詞列表,一個用于用戶玩的游戲,它們之間定義了外鍵關系。這是模型定義:class WordMaster(models.Model):    word = models.CharField("Secret Word", max_length=100)    category = models.CharField("Category", max_length=20)    sub_category = models.CharField("Sub-category", max_length=50)class GamesPlayed(models.Model):    word_id = models.ForeignKey(WordMaster, on_delete=models.DO_NOTHING)    guessed_letters = models.CharField("Guessed letters", max_length=72, null=True)    guesses = models.IntegerField("Number of guesses", null=True)    won = models.BooleanField("Won", null=True)    start_time = models.DateTimeField("Started", auto_now=True, auto_now_add=False, null=True)現在,在玩游戲時,我需要單詞以及猜出的字母和猜出的次數。我將使用純 SQL 執行此操作,如下所示:SELECT * from gamesplayed gp    JOIN wordmaster wm on gp.word_id = wm.id    where gp.id = 5但是,盡管在許多地方進行了查找,但我未能在 Django ORM 中找到等效的查詢。所以我最后使用了一個過濾器查詢并在字典中得到了一個結果,然后更新了字典以添加另一個表中的值。這是我使用的代碼:g = GamesPlayed.objects.filter(pk=5)game = list(g.values())[0]game.update(list(WordMaster.objects.filter(pk=game['word_id_id']).values())[0])但這似乎是一種相當多余的做事方式,原因有二:我無法使用模型中定義的關系如果我有 3-4 個如此相關的表,那么我將不得不為每個表一個一個地進行查詢,這完全違背了 ORM 的目的。那么有沒有更好的方法來做到這一點?
查看完整描述

1 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

我不確定我是否正確理解了您的問題,但我認為您可能需要使用.select_related().


我使用了適用于您的案例的文檔示例


這是標準查找:


# Hits the database.

gp = GamesPlayed.objects.get(id=5)


# Hits the database again to get the related `WordMaster` object.

word_to_guess = gp.word_id.word

這是 select_related 查找:


# Hits the database.

gp = GamesPlayed.objects.select_related('word_id').get(id=5)


# Doesn't hit the database, because `gp.word_id` has been

# prepopulated in the previous query.

word_to_guess = gp.word_id.word

這是否回答你的問題?


查看完整回答
反對 回復 2023-02-07
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號