在Django中调用时替换数据库值

时间:2015-12-12 21:41:49

标签: python django

当我在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函数,我仍然不确定表格项目是什么。它是字典吗?

谢谢!

2 个答案:

答案 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

  1. 使用models.py

    中的Model Method在模型类中添加派生属性
  2. 转换view.py代码中的值,为模板中的上下文生成正确的值

  3. 转换模板代码中的值

  4. 执行此操作取决于您是否以及在何处使用原始开/关值以及您希望将转换工作负载放在何处。

    如果您不需要在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()