【问题标题】:how to send just one part of an object to template in django如何仅将对象的一部分发送到django中的模板
【发布时间】:2018-02-18 20:59:27
【问题描述】:

我只想将对象的一部分发送到模板。

我有 2 个模型,如下所示:

class Person(models.Model):
    name = models.CharField(max_legth=50)
    sure_name = models.CharFiled(max_length=50)

class Office(models.Model):
    location = models.CharField(max_legth=50)

我还创建了如下模型:

class PersonOffice(models.Model):
    person = models.ForeignKey(Person)
    office = models.ForeignKey(Office)

现在,当我通过PersonOffice.objects.all()从数据库中获取数据时,数据如下:

{
    {
        "pk": 0,
        "person": {
            "pk":0,
            "name":"Harry",
            "sure_name":"Potter"
            },
        "office":{
            "pk":5,
            "location":"Toronto"
        }
    },  
    {
        "pk": 1,
        "person": {
            "pk":6,
            "name":"John",
            "sure_name":"Kelly"
            },
        "office":{
            "pk":6,
            "location":"NewYork"
        }
    }   
}

我想通过render 函数将办公室发送到模板。我该怎么做? 谢谢

更新 我想在带有{% for %} 循环的模板中使用它。例如:

{% for office in Offices %}
    <p>Office location: {{ office.location }}</p>
{% endfor %}

我使用了以下代码:

offices = PersonOffice.objects.all().values('office')
print(offices)

以下是终端中的结果:

<QuerySet [{'office': 1}, {'office': 2}, {'office': 11}]>

【问题讨论】:

  • 您可以发布您的views.py 文件以显示您当前的渲染位置吗?
  • 你似乎在发送到模板之前序列化你的对象,不知道为什么
  • 没有。我不序列化它们。只是为了在此处显示的一种好方法,我将它们显示为 json 格式。

标签: django django-models django-templates django-views django-orm


【解决方案1】:

您可以使用values

PersonOffice.objects.values('office')

这将为每个对象输出一个带有office 的查询集。

编辑:

PersonOffice.objects.values('office__location')

【讨论】:

  • 谢谢,我改了问题。通过使用values(),我不能像{{ office.location }}那样使用。还有什么办法吗?
  • 是的,您可以使用。值还输出一个查询集。另请参阅我的编辑。 @msln
  • 我写了这段代码:{% for office in offices %}{{ office.location }}&lt;br&gt;{% endfor %} 但它没有在 html 文件中显示任何内容
  • 在渲染之前尝试打印上述查询的输出,看看输出是什么。你可能会看到一些东西
  • 如果我只写{% for office in offices %} {{office}} {% endfor %},它会显示我在values() 函数中提到的数据和字段。但我不能单独使用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 2020-04-06
相关资源
最近更新 更多