django模型返回的自定义方法似乎是缓存的

时间:2014-06-04 12:51:59

标签: django django-models

我写的模型包含一些营养数据,它包含一些自定义数组和方法。我有一个自定义方法的问题,即在每个请求中添加一个值,从开始但不是从上一个请求的返回开始。这听起来令人困惑,但我希望下面的代码能澄清一切:

class Article(models.Model):   
    protein = models.FloatField()
    carbohydrates = models.FloatField()
    fat = models.FloatField()

    def add_value(self, list):
        for i, x in enumerate(list[:]):
            value = getattr(self, x['field'])                
            list[i]['value'] = x['initial'] + value # this line adds value in every request, so if value=2, for protein browser will show 3, 5, 7 ... adding 2 after every page reload
        return list

    _basic_ingredients = [
        {'field': 'protein', 'initial': 1},
        {'field': 'carbohydrates', 'initial': 2},
        {'field': 'fat', 'initial': 3},
    ]

    def get_basic_ingredients(self):
        return self.add_value(self._basic_ingredients)

views.py
def article_page(request, id):
    article = get_object_or_404(Article, id=id)
    return render(request, 'app/template.html', {'article': article})

template.html
{% for row in article.get_basic_ingredients %}
    <p>{{ row.field }}: {{ row.value }}</p>
{% endfor %}

我尝试更改列表名称,添加枚举,列表副本[:],没有任何帮助。我可能遗漏了一些东西,但找不到确切的东西。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我真的无法理解你在这里想要达到的目标,所以我无法告诉你如何解决你的问题。但是,识别问题很简单:_basic_ingredients是一个类级变量,因此将由Article模型的所有成员共享,并将持续跨请求,直到该进程被终止或重新启动。