2011-07-27 18 views
5

Bazı nesneler silindiğinde yöneticilerin bildirim almasını istiyorum ancak aynı zamanda hangi kullanıcının silme işlemini gerçekleştirdiğini de belirlemek istiyorum.Django: post_delete sinyalini kullanırken hangi kullanıcının silindiğini belirleme

Mümkün mü?

Bu

kodudur: Ben dahili sinyalleri kullanarak mümkün olduğundan şüpheliyim

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

cevap

5

(orada örtülü bir delete operasyona bağlı hiçbir User ve Django en loose coupling yüzünden veritabanı katmanı uğraşmaz HttpRequest nesnesiyle). Ben user argüman sağlar kendi sinyalini oluşturmak ve silme işlemi gibi yer, bir şey ne gerekiyorsa görünümünde göndermek olacaktır:

# 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

o sinyal yerine modeli ile kapalı ateş olsaydı daha iyi olmaz görünüm? Böylece yönetici arayüzü ve üçüncü taraf kodu hala çalışıyor mu? –

+0

@Jack M. Sanırım bu daha iyi olurdu, ama sonra hangi "Kullanıcı" nın "istek" olmadan silme işlemini yaptığını nasıl anlayacaksınız? –

İlgili konular