2014-07-15 43 views
1

在我的django項目中,我有一個模型,它存儲用戶的位置,user_id是django User模型的外鍵。這裏是模型使用外鍵訪問另一個模型中的對象

class Points(models.Model): 
    user_id = models.ForeignKey(User) 
    lat = models.FloatField() 
    lon = models.FloatField() 

現在我要執行這樣的查詢:

Points.objects.filter(user_id=id).values_list('user_id','lat','lon') 

但我也希望從Django的在此列表中User模型username領域。無論如何,我可以做到這一點,而無需執行另一個查詢,如User.objects.get(id=id).value_list('username'),然後加入這兩個列表。我通過了select_relatedprefetch_related,但我不確定我是否可以在這裏使用它們。

+0

使用[select_related](https://docs.djangoproject.com/en/dev/ref/models/querysets/#id4)。看看這2個問題,可能的重複:http://stackoverflow.com/questions/2425603/how-do-i-select-from-multiple-tables-in-one-query-with-django,http:// stackoverflow .com/questions/13092268/how-do-you-join-two-tables-on-a-foreign-key-field-using-django-orm –

回答

1

您可以使用雙下劃線表示法在單個調用中獲取相關字段。試試這個:

Points.objects.filter(user_id=id) 
       .values_list('user_id', 'lat', 'lon', 'user_id__username') 

(雖然你應該重命名user_iduser Django的追加_id你的外鍵的字段,這意味着你現在有兩個屬性:user_id,這將評估對User對象,user_id_id ,將評估爲數字ID)

+0

感謝這正是我所需要的。我不知道django本身附加了'_id'。我會重命名它。 –

相關問題