python - Django从查询集中的外键获取外键
问题描述
我正在尝试在 1 个查询中获取外键的外键,但我无法使其工作
楷模
class Storage(models.Model):
name = models.CharField(max_length=200,
null=False,
blank=False,
unique=True)
class Freezer(models.Model):
name = models.CharField(max_length=200,
null=False,
blank=False,
unique=True)
storage = models.ForeignKey(Storage,
models.CASCADE,
blank=True,
null=True,
related_name='freezer')
class Rack(models.Model):
name = models.CharField(max_length=200,
null=False,
blank=False,
unique=True)
freezer = models.ForeignKey(Freezer,
models.CASCADE,
blank=True,
null=True,
related_name='rack')
代码
当我得到所有冰柜时,这很有效
display_text = ", ".join([
"<a href={}>{}</a>".format(
reverse(
'admin:{}_{}_change'.format("admin",
"freezer"),
args=(items.pk, )), items)
for items in obj.freezer.all()
])
if display_text:
return mark_safe(display_text)
但我无法得到这个查询的机架
display_text = ", ".join([
"<a href={}>{}</a>".format(
reverse(
'admin:{}_{}_change'.format("admin",
"rack"),
args=(items.pk, )), items)
for items in obj.freezer.rack.all()
])
if display_text:
return mark_safe(display_text)
有什么建议对不起我是新人吗?
解决方案
通过这种计算,您应该从您需要的类开始,即 Rack。
... for items in Rack.objects.filter(freezer__storage=obj)
(请注意,通过将related_names 设置为单数“rack”和“freezer”,您使事情变得比需要的更混乱。如果您必须设置它们,我不建议这样做,您至少应该使用复数名称。)
推荐阅读
- javascript - 如何在 ReactJS 中的页面加载时加载组件?
- makefile - 如何删除makefile中的扩展名
- python - python中的特殊字符处理(连字符(-))
- perl - 如何将参数转发给perl中的超级函数?
- python - 生成具有预定义均值、标准、最小值和最大值的随机数
- angular - Angular 6 单元测试:我想为我的测试存根声明的属性
- python - Python将元组转换为值
- c# - 获取 Regex.Matches 在位置 0 开始匹配
- docker - 什么是 docker 子镜像
- java - 我想使用 JDBI 以 1000 的块插入 11000 条记录,这样所有记录都应该持续存在或根本不存在。它目前给出的错误如下