2009-04-06 14 views
14

en mi aplicación Django tengo un modelo de Newsletter. Ahora me gustaría ser capaz de enviar el boletín (e incluso reenvío es) de Django administrador.Acciones personalizadas en Django Admin

Podría hacer esto con un gancho en el método Model.save(), pero ¿hay alguna otra manera que no esté relacionada con el Modelo?

Gracias

Respuesta

16

Admin actions le permiten conectar fácilmente las acciones personalizadas que se pueden realizar con los elementos seleccionados de la lista de páginas de la administración.

+0

Esto parece ser una buena solución. No creo que sea un gran problema actualizar mi sitio, pero ¿cómo lo hizo la gente antes de Django 1.1? – Lorenzo

+1

Esta función en realidad comenzó como una aplicación de terceros: http://code.google.com/p/django-batchadmin/ –

+0

Solo una actualización; Django ahora incluye acciones de administración en todas las versiones posteriores a 1.1: http://docs.djangoproject.com/en/1.2/ref/contrib/admin/actions/ –

1

Si lo hace desde el administrador, tendrá que anular el método save(), pero puede ser el guardado de AdminModel ... no necesita ser el guardado completo del modelo.

Sin embargo, si usted está enviando un correo electrónico mucho de mensajes de correo electrónico, un mejor enfoque sería instalar django-mailer mensajes de correo electrónico que pone en una cola para su posterior procesamiento y luego le proporciona un nuevo comando de gestión: send_mail.

Una vez que esté listo para enviar el boletín, puede ejecutar manualmente python manage.py send_mail. Todos los correos electrónicos con errores se moverán a una cola diferida en la que puede volver a intentar enviarlos más tarde.

Puede automatizar esto ejecutando manage.py send_mail desde cron.

Si realmente quieres ser elegante y hacerlo desde el sitio de administración, instala django-chronograph y configura tu agenda send_mail desde allí.

+0

¿Cuál sería la diferencia entre ModelAdmin.save() y un modelo? salvar()? – Lorenzo

+0

Significado en lugar de guardar en su modelo en models.py guarda en su clase admin.ModelAdmin en admin.py. –

+0

Ver documentos aquí: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#save-model-self-request-obj-form-change –

1

puede probar esta https://www.youtube.com/watch?v=WvL1cR2MgLI

acaba de cambiar

def available (modeladmin,request,queryset): 
    queryset.update(status='ava') 

def not_available (modeladmin,request,queryset): 
    queryset.update(status='not') 

a algo así como

def send(modeladmin, request, queryset): 

for data in queryset: 

    subject=data.title 
    message=data.mesage 


    for d in Users.objects.filter(newsletter=True): 
     email=d.email 



     sendemail = EmailMessage(subject, message+unsubscribe, '[email protected]', 
      [email], [], 
      headers = {'Reply-To': '[email protected]'}) 

     sendemail.content_subtype = "html" 

     sendemail.send()