我为我的超长标题道歉。
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 模型。 谢谢。
