이에서 오브젝트를 제거 예상되지 않은 행동 :장고의 검색어 업데이트 방법의 검색어
items = Item.objects.filter(sent=False)
items.count() # 3
items.update(sent=True)
items.count() # 0
방법의 검색어에서 그들을 잃어버린없이 개체를 업데이트 할?
이에서 오브젝트를 제거 예상되지 않은 행동 :장고의 검색어 업데이트 방법의 검색어
items = Item.objects.filter(sent=False)
items.count() # 3
items.update(sent=True)
items.count() # 0
방법의 검색어에서 그들을 잃어버린없이 개체를 업데이트 할?
.count()
을 실행할 때마다 다른 쿼리를 수행하고 있습니다.
예상되는 동작입니다. 업데이트를 수행하기 전에 sent=False
의 개체가 있고 그 이후에는 아무 것도 표시되지 않습니다.
결과를 유지하려면 변수에 그 결과를 저장해야합니다.
items_count = items.count()
너무 많은 항목을 다루지 않으면이 문제에 대한 잠재적 해결책은 쿼리 세트를 나열하는 것입니다.
items = list(Item.objects.filter(send=False)
len(items) # 3
Item.objects.filter(send=False).update(send=True)
len(items) # 3
이것은 물론 않습니다 (하지만 당신을 더 이상 내가 .count()
대신 len
를 사용했다 왜. 이것은 당신도 업데이트 후 모델을 사용할 수 있지만 의미 하는가 방법을 (검색어 세트에 액세스 할 수 없습니다 의미 send
여전히 False
로 설정됩니다)
검색어 세트는 모델의 하지 된 목록 인 것을 기억 그것은의 표현 - 당신은 이런 식으로하고있는 경우가 오래된 경우 상대하고 있음을 기억해야합니다. 쿼리를 반복하여 결과를 얻을 수 있습니다.
그게 정확한 코드예요? 'items = items.update (sent = True)'와 같은 것을하지 않습니까? –
@JensAstrup ye,이 코드는 입니다. items.update (sent = True)'int를 반환합니다 : 3 - 숫자 행에 영향을 받았습니다. – MaxCore
나는 내 자신의 코드와 비슷한 것을 실행하고'update() '(예상했던대로) queryset에는 영향을 미치지 않았다. 여기에 무슨 일이 일어나고 있는지 확실하지 않습니다 ... –