2009-04-06 40 views
14

trong ứng dụng Django của tôi tôi có một mô hình Bản tin. Bây giờ tôi muốn để có thể gửi bản tin (và thậm chí gửi lại nó) từ Django Admin.Hành động tùy chỉnh trong Django Admin

Tôi có thể làm điều này bằng móc trên phương pháp Model.save() nhưng có cách nào khác không gắn với Mô hình không?

Cảm ơn

Trả lời

16

Admin actions phép bạn dễ dàng treo lên hành động tùy chỉnh có thể được thực hiện trên các mục đã chọn từ các trang danh sách của admin.

+0

này có vẻ là một giải pháp tốt. Tôi không nghĩ rằng nó sẽ là một vấn đề lớn để cập nhật trang web của tôi, nhưng làm thế nào mọi người làm điều này trước khi Django 1.1? – Lorenzo

+1

Tính năng này thực sự bắt đầu dưới dạng ứng dụng của bên thứ ba: http://code.google.com/p/django-batchadmin/ –

+0

Chỉ cần cập nhật; Django bây giờ bao gồm các hành động quản trị trong tất cả các phiên bản sau 1.1: http://docs.djangoproject.com/en/1.2/ref/contrib/admin/actions/ –

1

Nếu bạn đang thực hiện nó từ quản trị viên, bạn sẽ cần phải ghi đè phương thức save(), nhưng có thể là lưu AdminModel ... không cần phải lưu Mô hình đầy đủ.

Tuy nhiên, nếu bạn đang gửi email lot email, cách tiếp cận tốt hơn sẽ là cài đặt django-mailer, đặt email vào hàng đợi để xử lý sau và sau đó cung cấp cho bạn một lệnh quản lý mới: send_mail.

Vì vậy, khi bạn đã sẵn sàng gửi bản tin, bạn có thể chạy thủ công python manage.py send_mail. Bất kỳ email nào có lỗi sẽ được chuyển đến hàng đợi bị trì hoãn, nơi bạn có thể thử gửi lại chúng sau này.

Bạn có thể tự động hóa điều này bằng cách chạy manage.py send_mail từ cron.

Nếu bạn thực sự muốn được ưa thích và làm điều đó từ trang quản trị, hãy cài đặt django-chronograph và thiết lập lịch biểu send_mail của bạn từ đó.

+0

Điều gì sẽ là sự khác biệt giữa một ModelAdmin.save() và một Mô hình. tiết kiệm()? – Lorenzo

+0

Có nghĩa là thay vì lưu trong Mô hình của bạn trong models.py bạn lưu trong lớp admin.ModelAdmin của bạn trong admin.py. –

+0

Xem tài liệu tại đây: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#save-model-self-request-obj-form-change –

1

bạn có thể thử này https://www.youtube.com/watch?v=WvL1cR2MgLI

chỉ cần thay đổi

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

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

một cái gì đó giống như

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() 
Các vấn đề liên quan