0

ビュー.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 に入った場合。この日付よりも前の日付、つまりこの日付の直前の日付が必要です。サムボディは助けてくれる?

4

3 に答える 3

0
q3 = KEBReading.objects.filter(datetime_reading__month=a,
    datetime_reading__year=selected_year)       
for item in q3:
   item.signed = True
   item.save()
于 2013-02-28T12:00:37.450 に答える
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()

しかし、あなたの状況では、更新クエリは実行されるデータベース呼び出しが少ないため、より良いアプローチです。

于 2013-02-28T12:22:22.193 に答える
0

更新クエリを使用してみてください:

ブールフィールドsignedの場合:

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、月を数値として指定することで実行できます。たとえば、22 月の場合:

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)))
于 2013-02-28T12:02:49.347 に答える