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。如果我查询,我希望日期小于此日期,即在此之前的日期。sumbody有帮助吗?
q3 = KEBReading.objects.filter(datetime_reading__month=a,
datetime_reading__year=selected_year)
for item in q3:
item.signed = True
item.save()
q3=KEBReading.objects.filter(...)
将返回一个对象列表。Django Model
的任何实例都是对象,该实例的所有fields
都是该对象的属性。也就是说,您必须使用dot (.)
表示法来使用它们。
类似:
item.signed = "signed"
如果您的对象是dictionary
或从dictionary派生的类,那么您可以使用命名索引,如:
item["signed"] = "signed"
在您的情况下,该用法是无效的(因为您的对象类型不是基于dictionary
的(
您可以调用更新查询:
KEBReading.objects.filter(...).update(selected="selected")
或者在循环中设置新值,然后将其保存为
for item in q3:
item.signed="signed"
q3.save()
但在您的情况下,更新查询是一种更好的方法,因为它执行的数据库调用更少。
尝试使用更新查询:
如果signed
是booleanfield:
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
:
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)))