通过外键访问另一个模型的对象
在我的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_related和prefetch_related,但我不确定在这里能不能用它们。
1 个回答
2
你可以使用双下划线的写法来一次性获取相关的字段。试试这个:
Points.objects.filter(user_id=id)
.values_list('user_id', 'lat', 'lon', 'user_id__username')
(不过你应该把 user_id
改名为 user
。因为Django会在你的外键字段后面加上 _id
,这意味着你现在有两个属性:user_id
,它会返回 User
对象,还有 user_id_id
,它会返回数字ID。)