我很难将下面的mysql查询更改为django查询
SELECT * FROM dashboard_db.dashboard_system ds
JOIN dashboard_db.dashboard_userpreference up
ON ds.id = up.system_id
WHERE username = "<user>"
以下是我的django应用程序中的模型
class System(models.Model):
system_name = models.CharField(max_length = 40)
LOCATION = (('0', 'Inernal'),('1','External'))
location = models.CharField(max_length=1, choices=LOCATION)
def __str__(self):
return self.system_name
class UserPreference(models.Model):
username = models.CharField(max_length = 40)
system = models.ForeignKey(System, on_delete = models.CASCADE)
def __str__(self):
return self.username
我一直在尝试使用工会和其他一些选择。我知道执行原始sql查询是一种选择。不过,我想知道是否可以使用django样式的查询执行连接。
1条答案
按热度按时间pftdvrlh1#
我想你想要
System
至少有一个对应的UserPreference
susername
是既定的<user>
.我们可以通过反向查询集进行查询,使用该模型的名称和两个连续的下划线:
你当然要替换的地方
'<user>'
与用户名匹配的字符串(或“计算”希望获得的用户名的python表达式)。这将产生一个
QuerySet
将包含所有System
条件成立的条件。但是请注意System
如果出现多个UserProfile
存在于给定的username
与此相关的链接System
(也许这在这里是不可能的,但是username
不是unique=True
在您的模型中,至少从理论Angular 来看,这是可能的)。万一你想要一个
System
最多发生一次,可以使用.distinct()
上QuerySet
: