2015-02-04 5 views
2

내가 내 모든 모델장고 대량 업데이트

를 다시 저장해야합니다() 저장 트리거 할

Users.objects.all() 업데이트 (= 활성 참) 모델에서

. :

그러나 위 모델은이 모델에서 save() 메서드를 트리거하지 않습니다. 따라서 url = XYZ는 설정되지 않습니다. 이것이 가능한가?

업데이트 :

이 보이는 나는이 시도) (이 사용 .update를 할 수 없어 같은 :

>>> objects = Users.objects.all() 
>>> for item in objects: 
...  item.save() 
+0

당신은 동기 부여에 대한 좀 더 정교한 수 있을까요? 유스 케이스를 설명하십시오. 감사. – alecxe

+1

OP가하려고하는 것이 무엇 이건간에 Methinks는 데이터베이스 트리거로보다 효율적으로 수행 될 수 있습니다. – Kevin

+0

@alecxe 물론, 모델 Save() 메소드를 내 자신으로 덮어 씁니다. 저장 시점에 DB에 몇 가지 추가 사항이 추가됩니다. 위의 명령을 실행해도 Save() 메서드 모델이 트리거되지는 않습니다. – Prometheus

답변

3

아니,이 impossible입니다 : (

해당 업데이트를 실현를) SQL 수준에서 업데이트를 수행하므로 모델의 save() 메서드를 호출하지 않으며 ModelSave()를 호출 한 결과 인 pre_save 또는 post_save 신호를 내 보내지 않습니다. 당신이) (저장 그 이상() 저장 방법 사용자 정의를 가지고 모델, 루프 기록의 무리를 업데이트하고 호출 할 경우

$ ./manage.py shell 
Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> from django.contrib.auth.models import User 
>>> for u in User.objects.all(): 
...  u.is_active = True 
...  u.save() 
... 
>>> 
+0

각 개체를 반복하고 장고 내에 저장해야합니다. 쉘에서이 작업을 수행 할 수 있습니까? – Prometheus

+0

확실히 쉘에서 수행 할 수 있습니다. 업데이트 된 답변을 참조하십시오. – catavaran

+0

완벽한 감사합니다! – Prometheus