我写的模型包含一些营养数据,它包含一些自定义数组和方法。我有一个自定义方法的问题,即在每个请求中添加一个值,从开始但不是从上一个请求的返回开始。这听起来令人困惑,但我希望下面的代码能澄清一切:
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 %}
我尝试更改列表名称,添加枚举,列表副本[:],没有任何帮助。我可能遗漏了一些东西,但找不到确切的东西。在此先感谢您的帮助。
答案 0 :(得分:0)
我真的无法理解你在这里想要达到的目标,所以我无法告诉你如何解决你的问题。但是,识别问题很简单:_basic_ingredients
是一个类级变量,因此将由Article模型的所有成员共享,并将持续跨请求,直到该进程被终止或重新启动。