簡體   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