通过外键访问另一个模型的对象

1 投票
1 回答
3452 浏览
提问于 2025-04-18 13:20

在我的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,但我不确定在这里能不能用它们。

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。)

撰写回答