Skip to main content
 首页 » 编程设计

python之有没有办法通过非 pk 列在 Django 模型中点击数据库一次从多个表中选择属性

2024年08月21日32arxive

我为我的超长标题道歉。

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 表的主键,因此 Board 表的过滤方法找不到该属性。

有什么解决办法吗?还是我必须更改模型设计?

请您参考如下方法:

是的,您可以简单地使用双下划线 (__) 来获取 Menu 模型的 menu_title 和 prefetch_related(),

生成的查询集将是这样的:

query_set = Board.objects.filter(menu__menu_title = "cat").prefetch_related('menu') 

因为您的模型 Board 有一个外键 menu 到 Menu 模型。 谢谢。