django内连接查询

时间:2009-03-04 14:48:10

标签: django inner-join

我正在与django合作,并且很难掌握如何进行复杂的查询

这是我的模特

class TankJournal(models.Model):
    user = models.ForeignKey(User)
    tank = models.ForeignKey(TankProfile)
    ts = models.DateTimeField(auto_now=True)
    title = models.CharField(max_length=50)
    body = models.TextField()

    class Meta:
        ordering = ('-ts',)
        get_latest_by = 'ts'

我需要在坦克对象的情况下拉出用户名。

用户对象是内置于django中的用户对象..谢谢!

编辑:

我试过这个

print User.objects.filter(tankjournal__tank__exact=id)

似乎没有拉出id ...并将tankjournal中的所有内容拉出来并将其与坦克对象相匹配

2 个答案:

答案 0 :(得分:6)

如果您已经拥有 tank 对象,那么您应该可以:

tank.user.username

要减少数据库查询,您可能需要考虑使用select_related(),例如

tanks = TankJournal.objects.all().select_related()
for tank in tanks:
    username = tank.user.username

如果你有特定的坦克ID,那么:

tank = TankJournal.objects.select_related().get(id=123456)
username = tank.user.username

答案 1 :(得分:1)

我可能误解了您的问题,但User.objects.filter()上的请求将返回用户对象列表,而不是用户ID。你所写的内容在技术上看是正确的。

但请记住,您所拥有的模型在TankProfile对象和TankJournal之间设置了一对多。换句话说,单个TankProfile可以与多个TankJournal相关联,因此可以与多个用户相关联。鉴于此,您的查询正在做正确的事情,返回多个用户。