2009-03-04 63 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