繁体   English   中英

在Django中将对象存储到字典中

[英]Storing objects into dictionary in Django

我在数据库中存储了一些错误,因此可以轻松地在视图之间发送它们。 这是我的models.py:

class Errors(models.Model):
    error_number = models.IntegerField(primary_key=True)
    error_message = models.CharField(max_length=45)
    status = models.BooleanField(default=0)
    datetime = models.DateTimeField(auto_now=True)

我想将错误放入字典中,以便以后将其传递给模板。 我希望仅当状态为True / 1时才发生这种情况。视图是否是执行此操作的正确方法?

现在,由于我在调用Errors.objects.all()时泛滥了newtwork,因此我认为这是一个不好的程序,但是我不知道如何实现for循环。

def index(request):
    err = {'error_numbers':[], 'error_messages': [], 'datetime':[], 'test':[]}

    warnings = Errors.objects.all()

    for warning in warnings:
        if Errors.objects.filter(status='1'):
            err['error_numbers'].append(warning.error_number)
            err['error_messages'].append(warning.error_message)
            err['datetime'].append(warning.datetime)

    return render(request, "index.html", err)

我还可以问如何将相同错误的所有数据(即错误号,错误消息和日期时间)分组到模板中以一起显示吗? (PS我确实意识到,以SO要求代码是不行的,因此,这对于愿意共享一些有用站点或示例的任何人来说都是可选的)。

下面的示例(正如我在moemnt上所使用的)完全不打印任何内容。

<ul>
{% for key, value in err.iteritems %}
     <li>{{key}: {{value}}</li>
{% endfor %}
</ul>

关于您共享的代码,有很多话要说。

首先,我不太确定为什么您真的需要具有这种结构的字典。 您想要的输出是什么?


其次,这段代码很烂:

for warning in warnings:
    if Errors.objects.filter(status='1'):
        ....

status是一个BooleanField 您应该使用布尔值对其进行过滤。 另一方面,为什么需要迭代过滤掉整个数据库? 你的意思是这样吗?

for warning in warnings:
    if warning.status:
        ...

另一件事是您选择的命名。 最好给模型起一个单数的名字。 使用Error而不是Errors


如果您确实需要执行以下操作。 我建议您使用collections.defaultdict 它将允许动态添加带有list键。

from collections import defaultdict
err = defaultdict(list)

for warning in warnings:
    if warning.status:
        err['error_numbers'].append(warning.error_number)
        err['error_messages'].append(warning.error_message)
        err['datetime'].append(warning.datetime)

但是,再次看来,您正在尝试实现某些目标。 您可能应该重新考虑您的需求和方法。


毕竟,这应该打印出一个键和每个键的列表。

<ul>
{% for key, values in err.iteritems %}
 <li>{{key}}:    #edited here, 1 "}" was missing
     {% for value in values %}{{value}}{% endfor %}
 </li>
{% endfor %} 
</ul>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM