簡體   English   中英

在Django模型中,是否有任何方法可以通過非pk列從多個表中選擇屬性,而只需一次點擊DB即可?

[英]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”,但是我的問題略有不同。

  • “ menu_title”不是Menu表的PK,因此Board表的篩選方法無法找到該屬性。

有什么解決辦法嗎? 還是我必須更改模型設計?

是的,您可以簡單地使用雙下划線(__)來通過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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM