pre_delete 신호에 연결된 콜백에서 django 사용자 (모델의 delete 메소드를 호출 함)를 가져올 수 있습니까?django에서 pre_delete 신호의 현재 사용자
답변
신호가 요청 인스턴스를 전달하지 않지만 데코레이터를 추가하고 추가하여 해당 모델을 삭제하는 뷰에서 해당 데코레이터를 사용할 수 있습니다.
이 콜백 함수라고 가정 : 데코레이터에 추가되는
def pre_delete_cb(sender, instance, using, **kwargs):
pass
:
from django.db.models.signals import pre_delete
from functools import wraps
from django.utils.decorators import available_attrs
def pre_delete_dec(cb, sender):
def decorator(view_func):
@wraps(view_func, assigned=available_attrs(view_func))
def _wrapped_view(request, *args, **kwargs):
cb.request = request # here we add the request to the callback function
pre_delete.connect(cb, sender=sender) # and connecting the real pre_delete to the callback
return view_func(request, *args, **kwargs)
return _wrapped_view
return decorator
그리고 당신이 그것을 호출하는 방식으로보기에 장식을 사용 - 대신 pre_delete.connect(pre_delete_cb, MyModel)
는 사용
@pre_delete_dec(pre_delete_cb, MyModel)
def myview(request):
다음 콜백 당신이 액세스 t을해야합니다 O 요청으로 :
가def pre_delete_cb(sender, instance, using, **kwargs):
current_user = pre_delete_cb.request.user
당신은 단지보기 당, 글로벌 수준에이를 추가 할 수 있습니다 - 미들웨어로 사용 :
from django.db.models.signals import pre_delete
def pre_delete_cb(sender, instance, using, **kwargs):
current_user = pre_delete_cb.request.user
class PreDeleteMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
pre_delete_cb.request = request
from myapp.models import MyModel
pre_delete.connect(pre_delete_cb, sender=MyModel)
여러 모델에 대해보다 일반적인 솔루션을 만들 수 있습니까? 솔루션에서 올바르게 이해하면 각 뷰를 각 모델별로 별도로 장식해야합니다. –
물론 미들웨어를 사용합니다. PreDeleteMiddleware의 마지막 두 줄을 지우고 원하는 어떤 모델이든 코드의 어딘가에 추가하십시오. 'pre_delete.connect (pre_delete_cb, sender = some_model)'에서 pre_delete_cb 콜백 메소드를 사용하기 만하면됩니다. 미들웨어는 실제로 실제 모델과 아무런 관련이 없습니다. 요청 속성을 콜백 함수로 설정하면됩니다. 하지만 데코레이터를 사용할 수도 있습니다. pre_delete.connect를 이동하십시오. 요청 객체와 콜백 만 있으면됩니다. – Tisho
- 1. django에서 Pre_delete 신호 사용
- 2. django : pre_save 신호의 세션 업데이트
- 3. Django에서 현재 로그인 한 사용자의 사용자 ID를 얻는 방법은 무엇입니까?
- 4. 신호의 초기 값 Simulink
- 5. django에서 요청 외 현재 사용자에게 액세스하려면 어떻게해야합니까?
- 6. django에서 'anti-permissions'로 사용자 부여
- 7. 신호의 고조파 계산
- 8. 신호의 상관 관계
- 9. matlab에있는 소리 신호의 강도
- 10. pre_delete() 또는 post_delete() 신호 인수를 전달 하시겠습니까?
- 11. Django에서 뷰에 현재 저장된 객체 가져 오기
- 12. django에서 관리 사이트 사용자 정의
- 13. Django에서 사용자 추가 양식 만들기
- 14. Django에서 사용자 작업을 기다리는 팝업
- 15. Django에서 social_auth 사용자 모델 확장하기
- 16. Django에서 사용자 프로필 페이지 만들기
- 17. django에서 사용자 관리 양식 확장
- 18. 현재 사용자/그룹에서 현재 사용자 그룹으로의 입력
- 19. 간격이있는 신호의 전력 스펙트럼 밀도?
- 20. QMainWindow에 대한 신호의 'Onload'정렬이 있습니까?
- 21. C#에서 신호의 주파수를 계산합니다.
- 22. 신호의 발신자를 감지합니다 (리눅스, ptrace)
- 23. 생성기를 PyQt4 신호의 인수로 설정
- 24. 포커스와 포커스 인 (아웃) - 이벤트 신호의 차이점
- 25. Django 신호의 순서를 변경할 수 있습니까?
- 26. django에서 필터링하는 사용자 기반 모델 인스턴스 admin
- 27. Django에서 사용자 정의 templatetags를 검색하는 방법
- 28. django에서 사용자 삭제, CMS 페이지 유지
- 29. django에서 사용자 암호를 디 컴파일하는 방법
- 30. django에서 사용자 정의 URL 가져 오기
당신은 아마도 treadlocal 접근 방식으로 가야 할 것이다, 그러나이 수도 달성하고자하는 바에 따라 문제에 대한 더 나은 접근법이 필요합니다. 즉, 문제의 컨텍스트에 대한 자세한 정보를 제공해야합니다. –
삭제 된 테이블에 대한 정보를 저장하는 백엔드 db에 대한 삭제 트리거가 있습니다. 다른 테이블에 기록하십시오. 나는 누가 django 사용자가 삭제 작업을 시작했는지 정보를 필요로하므로 삭제할 레코드를 django-user id로 업데이트하는 방법을 사용하려고합니다. 그런 식으로 사용자가 트리거를 사용할 수있게됩니다. –