2017-10-22 6 views
1

特定のインスタンスが最新の定義であるかどうかを判断するためにlatestフィールドを持つモデルがあります。Django:ブールフィールドが更新されない

dbに新しい行を追加するときに、すでに存在するレコードに対してlatestをfalseとマークしてください。

latest_version = Segment.objects.filter(title=title, latest=True).first() 

if latest_version: 
    latest_version.latest = False 
    latest_version.save() 

これは、比較的まっすぐ進むようだがlatestフィールドが更新されませんとTrueとしてとどまります。

+0

あなたは 'first'の代わりに' last'を使いたいですか? –

+0

フィルタの最初の出現を更新しています。すなわち、 'Segment.objects.filter(title = title、latest = True).first()'は、フィルタリングした同じ 'Segment'オブジェクトを確認していますか?むしろフィルターを試し、その 'Segment'文書の' id'を使って一致させるべきです。 'Segment.objects.filter(title = title、latest = True).first()'は何も返しません。この場合、何も更新されません。全体的にコードは完璧に見えますし、うまくいくと思われます。 –

答えて

1

あなたは、間違ったオブジェクトを見ていると思います。私はあなたが探していると思います:

Segment.objects.filter(title=title, latest=True).last() 
+0

私は自分のフィルタクエリに一致するインスタンスが1つだけであるように意図していますので、 'first'と' last'の間に違いがあるとは思わないでしょう。どのメソッドに関係なく、 'instance.latest'の値は変更されません(例えば、' instance.save() 'の後に' print(instance.latest) 'の値がtrueを返します) – pauld

+0

'最後に、それは働いた!だから私はそれが働く原因を理解していないが、感謝しますか?どのような推奨読書をいただければ幸いです! – pauld

+0

助けてくれたらと思います。あなたが間違っていたのは、あるオブジェクトを更新して別のオブジェクトを見ていたということだけでした。 first()とlast()は互いに反対です。そしてあなたの状況はlast()が必要です。乾杯 – rajkris

関連する問題