다음을 사용하여 필터와 일치하는 모든 Django 레코드를 업데이트 할 수 있다는 것을 알고 있습니다.
myQuery = myModel.objects.filter(fieldA = 1, FieldB = 2)
myQuery.update(fieldA = 5, FieldB = 6)
그러나 쿼리 결과를 반복하고 특정 값만 업데이트하려면 어떻게해야합니까? 나는 시도했다 :
myQuery = myModel.objects.filter(fieldA = 1, FieldB = 2)
for item in range(myQuery.count())
if (myQuery[item].fieldC) == 10:
myQuery[item].update(fieldC = 100)
이것은 반환 AttributeError: 'myModel' object has no attribute 'update'
당신이 스스로 알아 낸 것처럼 Model
객체에는 .update(..)
방법 이 없습니다 . 할 수 있습니다 .save(..)
[장고 - 문서] 개체와 함께 업데이트 할 필드를 지정할 update_fields=…
매개 변수 [장고 - 문서] :
myQuery = myModel.objects.filter(fieldA=1, FieldB=2)
for item in myQuery:
if item.fieldC == 10:
item.fieldC = 100
item.save(update_fields=['fieldC'])
즉, 위의 내용은 매우 비효율적 입니다. n 개의 개체에 대해 최대 n + 1 개의 쿼리를 만듭니다.
여기에서 조건을 필터 부분으로 간단히 이동할 수 있습니다.
myModel.objects.filter(fieldA=1, FieldB=2, fieldC=10).update(fieldC=100)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다