2011-07-27 18 views
5

Chcę, aby administratorzy byli powiadamiani o usunięciu niektórych obiektów, ale chcę również określić, który użytkownik wykonuje usuwanie.Django: określ, który użytkownik usuwa podczas używania sygnału post_delete.

Czy to możliwe?

Jest to kod:

# 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) 

Odpowiedz

5

wątpię, że to możliwe przy użyciu wbudowanych sygnałów (nie ma User pośrednio związane z operacją delete, a ze względu Django loose coupling warstwa bazy danych nie dotyczy z obiektami HttpRequest). Chciałbym stworzyć własny sygnał, który zapewnia user argument i wysłać go w jakikolwiek widok operacja usuwania zachodzi, coś jak:

# 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

Czy nie byłoby lepiej, gdyby sygnał wystrzelone przez model zamiast z widok? W związku z tym interfejs administratora i kod strony trzeciej nadal by działał? –

+0

@Jack M. Myślę, że byłoby lepiej, ale jak się dowiedzieć, który "Użytkownik" robi usuwanie bez "żądania"? –