通过User类访问ForeignKey(Django)
我有两个类,它们彼此独立,但都通过一个外键(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()
。