通过User类访问ForeignKey(Django)

1 投票
2 回答
861 浏览
提问于 2025-04-17 13:12

我有两个类,它们彼此独立,但都通过一个外键(ForeignKey)和用户(User)类有关联。我的问题是,怎么才能通过用户对象找到与用户相关的东西呢?

这里有个例子

class A(models.Model):
    item = models.ForeignKey(User)

class B(models.Model):
    box = models.ForeignKey(User)

现在在我的视图中,我提取了类B的所有值

B.objects.all()

然后在我的模板中,我试着这样访问它

{% for value in B %}
   {{ value.B.User.item }}
{% endfor %}

但这样不行……我该怎么通过用户类访问类A呢?

2 个回答

0

正确的做法是在你的模型里设置一个相关名称,比如

class Item(models.Model):
    user = models.ForeignKey('auth.User', related_name='items')

class Box(models.Model):
    user = models.ForeignKey('auth.User', related_name='boxes')

然后如果你有一个用户对象,你可以这样做

user.items.all()

或者

user.boxes.all()

如果一个物品只能和一个盒子相关联,那么我会把Item.user字段换成Item.box外键。

0

如果我没记错的话,当你访问外键时,它们会自动被遍历,所以你可以直接用 value.box.item 来获取,前提是 item 是你用户表中的一列。

至于从用户表获取 A,我觉得 这个链接里有你需要的内容,语法应该是 some_user.a_set.all()。注意,a_set 实际上是 <模型名称>_set,只有在 some_user<模型名称> 之间有定义的外键关系时,这个方法才有效。

更新:

你似乎对 Django 的模型有些误解。 some_B_object.box 将是一个 User 类型的对象。所以,如果我理解得没错,从 B 获取 A 的话,你应该可以用 value.box.a_set.all()

撰写回答