【问题标题】:How can I iterate over foreign keys in a Django dictionary?如何遍历 Django 字典中的外键?
【发布时间】: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。

【问题讨论】:

标签: python django


【解决方案1】:

不,ForeignKeys 提供一对多关系。

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


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

{{ current_site.sensor }}

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

{{ current_site.sensor.value }}

【讨论】:

  • 是否可以从与站点对象关联的传感器对象创建另一个字典并对其进行迭代?
  • @Murphysboro 你不应该需要,除非我遗漏了什么,只需使用点符号来访问 sensor 本身的部分。
  • 我想检查传感器中的每个字段,看看它们是否包含一个值,就像我对上面示例中的站点字段所做的那样。
  • 点符号很酷,虽然我不知道我能做到这一点。
  • 没问题,如果这有助于随时投票或接受,让未来的访客知道您找到了问题的答案。
猜你喜欢
  • 2014-05-15
  • 1970-01-01
  • 2019-07-14
  • 2011-12-22
  • 1970-01-01
  • 2017-08-09
  • 2012-07-01
  • 2021-11-23
  • 2021-10-16
相关资源
最近更新 更多