5

특정 개체가 삭제 될 때 관리자에게 알리고 싶지만 삭제를 수행하는 사용자를 결정하고 싶습니다.Django : post_delete 신호를 사용할 때 삭제할 사용자를 결정하십시오.

가능합니까?

코드입니다 : 나는이 내장 된 신호를 사용 가능 의심

# models.py 
# signal to notify admins when nodes are deleted 
from django.db.models.signals import post_delete 
from settings import DEBUG 

def notify_on_delete(sender, instance, using, **kwargs): 
    ''' Notify admins when nodes are deleted. Only for production use ''' 
    if DEBUG: 
     #return False 
     pass 
    # prepare context 
    context = { 
     'node': instance, 
     'site': SITE 
    } 
    # notify admins that want to receive notifications 
    notify_admins(instance, 'email_notifications/node-deleted-admin_subject.txt', 'email_notifications/node-deleted-admin_body.txt', context, skip=False) 

post_delete.connect(notify_on_delete, sender=Node) 

답변

5

(이 암시 적으로 delete 작업에 묶여 더 User 없으며, 장고의 loose coupling의 때문에 데이터베이스 계층은 취급하지 않습니다 HttpRequest 개체). 나는 user 인수를 제공하는 내 자신의 신호를 생성 및 삭제 작업 같은 장소, 뭔가를 무엇이든보기에서 보낼 것이다 :

# myapp/signals.py 
from django.dispatch import Signal 
my_post_delete = Signal(providing_args=['instance', 'user']) 

# myapp/models.py 
from myapp.signals import my_post_delete 
... 
my_post_delete.connect(notify_on_delete, sender=Node) 

# myapp/views.py 
from myapp.signals import my_post_delete 
... 
@login_required 
def my_delete_view(request, ...) 
    ... 
    instance = Node.objects.get(...) 
    instance.delete() 
    my_post_delete.send(sender=Node, instance=instance, user=request.user) 
+0

는 신호가 대신의 모델에 의해 전원 해고 된 경우 더 나은하지 않을까요 전망? 따라서 관리자 인터페이스와 제 3 자 코드는 여전히 작동할까요? –

+0

@Jack M. 더 좋을 것 같지만'User'가'request'없이 삭제를하고있는 것을 어떻게 알 수 있을까요? –

관련 문제