当我在Django中回忆它时,我试图改变数据库条目的值。
所以我有一个包含大量ON和OFF值的数据库作为' value'时间'时间'。
当我回想起要显示的这些项目并绘制图形时,我希望能够更改所有' ON'到1和' OFF'到了0.
我正在做这样的基本召回
items = Item1.objects.all()
然后我想循环它们并进行更改。就像是。
for a in items:
if items.value == 'ON':
items.value[a] = 1
elif items.value == 'OFF':
items.value[a] = 0
原谅我,一旦你对它使用.object函数,我仍然不确定表格项目是什么。它是字典吗?
谢谢!
答案 0 :(得分:1)
我知道您想要动态转换值(On => 1,Off => 0)。
由于您只想为显示目的转换值,您有几个选项可以处理(没有人会更改数据库中的数据):
1a上。使用models.py中的Custom Manager转换自定义SQL查询中的值 - https://docs.djangoproject.com/en/1.9/topics/db/managers/#adding-extra-manager-methods
1b中。转换视图中自定义原始SQL中的值 - https://docs.djangoproject.com/en/1.9/topics/db/sql/#adding-annotations
使用models.py
中的Model Method在模型类中添加派生属性转换view.py代码中的值,为模板中的上下文生成正确的值
转换模板代码中的值
执行此操作取决于您是否以及在何处使用原始开/关值以及您希望将转换工作负载放在何处。
如果您不需要在Django中处理原始值,那么在数据库级别(在读取查询中)更改它们,因此Django已经收到0/1值。
但是,您可能会发现最容易遵循选项2(在models.py中)。
class Item1(models.Model):
... your current definitions
def _bin_value(self):
"Returns the tranformed ON/OFF value to 0/1."
if self.value == "ON":
return 1
if self.value == "OFF":
return 0
return None # you should define how you handle empty, NULL or unexpected value
bin_value = property(_bin_value)
在视图中使用bin_value而不是value。
答案 1 :(得分:0)
Item1.objects.all()
返回包含所有Item对象的查询集(非常类似于列表)。实际的Item1
类只取代数据库中的表。执行Item1.objects.all()[0]
将为您提供查询集中的第一个项目对象。您还可以在查询集上使用.order_by
方法按特定值(例如日期或投票值)对其进行排序。此外,在操作数据库对象后,您需要保存它。所以说你有这个代码:
items = Item1.objects.all()
然后你会做
for item in items:
if item.value == 'OFF':
item.other_value == 1
item.save()