查询后如何在数据库中存储字段

时间:2013-02-28 11:48:35

标签: django django-queryset

views.py:

     q3=KEBReading.objects.filter(datetime_reading__month=a).filter(datetime_reading__year=selected_year).values("signed")
     for item in q3:
       item["signed"]="signed" 
       print item["signed"]
      q3.save()  

如何将字段保存到数据库中?我正在尝试使用值保存名为“signed”的字段。如果我q3.save(),它会给出错误,因为它是一个查询集。我正在从数据库进行查询,然后根据结果,想要将值设置为字段并保存。

  prevdate=KEBReading.objects.filter(datetime_reading__lt=date)

我从数据库获取的所有行都小于当前日期。但我只想要最新的记录。如果我进入2012-06-03。我想查询我希望日期少于这个日期,即此前的日期。可以求助吗?

3 个答案:

答案 0 :(得分:0)

q3 = KEBReading.objects.filter(datetime_reading__month=a,
    datetime_reading__year=selected_year)       
for item in q3:
   item.signed = True
   item.save()

答案 1 :(得分:0)

尝试使用update query

如果signedbooleanfield

q3 = KEBReading.objects.filter(datetime_reading__month = a).filter(datetime_reading__year = selected_year).update(signed = True)

如果是charfield

q3 = KEBReading.objects.filter(datetime_reading__month = a).filter(datetime_reading__year = selected_year).update(signed = "True")

评论更新:

如果要根据datetime_reading月提取记录,可以通过提供月份作为数字来实现。例如,2月的2

q3 = KEBReading.objects.filter(datetime_reading__month = 2).order_by('datetime_reading')

如果您使用signed = True获取记录,则可以通过以下方式执行:

q3 = KEBReading.objects.filter(signed = True)

如果您想通过提供日期来仅提取上一个日期的记录,您可以使用:

prevdate = KEBReading.objects.filter(datetime_reading = (date - datetime.timedelta(days = 1)))

答案 2 :(得分:0)

q3=KEBReading.objects.filter(...)

将返回一个对象列表。 Django Model的任何实例都是对象,实例的所有fields都是该对象的属性。这意味着,您必须使用dot (.)表示法来使用它们。

像:

item.signed = "signed"

如果您的对象是dictionary或从字典派生的类,那么您可以使用命名索引,如:

item["signed"] = "signed"

并且在您的情况下,该用法无效(因为您的对象的类型不是基于dictionary

您可以拨打update query

KEBReading.objects.filter(...).update(selected="selected")

或在循环中设置新值然后保存

for item in q3:
   item.signed="signed" 
   q3.save()

但在您的情况下,更新查询是一种更好的方法,因为它执行的数据库调用较少。