2009-03-04 98 views
2

我与Django的工作,有一个很难把握怎么办复杂的查询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拔出一切,它匹配罐体对象

回答

6

如果你已经有你的坦克你应该可以做的事情:

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

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

但请记住,您已经在TankProfile对象和TankJournal之间建立了一个一对多的模型。换句话说,一个TankProfile可以与多个TankJournal相关联,因此可以与多个用户相关联。鉴于此,您查询的是正确的,返回多个用户。

+0

每个用户可以有多个坦克..每个坦克可以有多个日记条目..是从TankJournal模型中删除用户对象的正确方法吗? – Mike 2009-03-04 15:04:30