如何遍历 Django 字典中的外键?

Posted

技术标签:

【中文标题】如何遍历 Django 字典中的外键?【英文标题】:How can I iterate over foreign keys in a Django dictionary? 【发布时间】:2015-04-16 11:11:02 【问题描述】:

我对编程很陌生,并且有一个关于在我的 Django 视图文件中迭代外键的问题。

models.py

class Site(models.Model):
    other fields.......
    sensor = models.ForeignKey("Sensor", blank=True, null=True)
    slug = models.SlugField(unique=True)

views.py

def site(request, site_name_slug):

    context_dict = 

    empty_field = "<font color='LightGray'>No Data</font>"


    try:
        site = Site.objects.values().get(slug=site_name_slug)
        context_dict['site_slug'] = site_name_slug

        for key, value in site.iteritems():
            if value:
                context_dict[key] = value
            else:
                context_dict[key] = empty_field

可以添加这样的东西吗?

for key, value in (site.sensor).iteritems():
    if value:
        context_dict['sensor_%s' % key] = value
    else:
        context_dict['sensor_%s' % key] = value

这样我就不必对传感器对象中的每个字段都使用 if/else 或 try/except。

【问题讨论】:

Iterating over model attributes when creating a template in Django 的可能重复项 【参考方案1】:

不,ForeignKeys 提供一对多关系。

在您的模型中,给定的Site 将只有最多一个 传感器。没有什么可以迭代的,所以你问的没有意义。


不需要专门遍历所有sensors 字段来访问模板中的它们,如果您将页面site 传递到模板中,例如current_site,您可以访问传感器,如所以:

 current_site.sensor 

要访问传感器字段(例如,如果传感器有一个名为“值”的字段),只需附加该字段,如下所示:

 current_site.sensor.value 

【讨论】:

是否可以从与站点对象关联的传感器对象创建另一个字典并对其进行迭代? @Murphysboro 你不应该需要,除非我遗漏了什么,只需使用点符号来访问 sensor 本身的部分。 我想检查传感器中的每个字段,看看它们是否包含一个值,就像我对上面示例中的站点字段所做的那样。 点符号很酷,虽然我不知道我能做到这一点。 没问题,如果这有助于随时投票或接受,让未来的访客知道您找到了问题的答案。

以上是关于如何遍历 Django 字典中的外键?的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历 Django 模板中的字典?

如何遍历 django 模板中的嵌套字典

显示 % forloop% 的键和值的 Django 模板:如何遍历模板中的字典?

Django怎样遍历字典?

如何从 Django 模板中的外键访问值

循环遍历 Django 模板中的嵌套字典