[英]Isn't there any way to select attributes from multiple tables by non-pk-column with hitting DB once in Django model?
我為我的過長頭銜表示歉意。
class Menu(models.Model):
menu_code = models.IntegerField(blank=False, null=False) # It expresses order of menu items so it often can be changed.
menu_title = models.CharField(max_length=20, blank=False, null=False)
submenu_title = models.CharField(max_length=20, blank=True, null=True)
class Board(models.Model):
title = models.CharField(max_length=200, blank=False, null=False)
date = models.DateTimeField(default=timezone.now)
menu = models.ForeignKey(Menu)
以上是我的models.py的一部分。
我想做的就像下面的SQL一樣。
SELECT
*
FROM
Board B, Menu M
WHERE
B.menu_id=M.menu_id and
M.menu_title='cat';
要么
SELECT
*
FROM
Board B INNER JOIN Menu M
ON
B.menu_id=M.menu_id and
M.menu_title='cat';
我已經看到了許多有關此問題的答案,他們應該使用“ select_related”,但是我的問題略有不同。
有什么解決辦法嗎? 還是我必須更改模型設計?
是的,您可以簡單地使用雙下划線(__)來通過prefetch_related()獲取菜單模型的menu_title ,
結果查詢集將如下所示:
query_set = Board.objects.filter(menu__menu_title = "cat").prefetch_related('menu')
因為您的模型板具有菜單模型的外鍵菜單 。 謝謝。
首先要注意幾件事。 Menu
沒有menu_id
字段。 您的問題引用了一個。 您是說隱式創建的id
嗎?
您應該能夠編寫一個執行聯接的原始SQL查詢,然后提取數據並手動構建實例。
但這將是痛苦的。
如果在模型中添加外鍵關系,會更容易。 您為什么不願意這樣做?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.