2013-02-16 48 views
-2

我有包含到期日期的模型。領域看起來像這樣:在django應用程序中創建警報

passport_date_of_expiry = TodayOrLaterDateField(「到期日期」,)

此字段示於在管理列表顯示。我想要完成的是當到期日期到期日期爲6個月或更短時間時,該項目在管理員的列表顯示中用紅線突出顯示。要麼。當這種情況發生時,讓系統發送電子郵件作爲警報。我如何能夠輕鬆實現這一點。數據庫中已經有大量的數據,這是我想添加到這個系統中的一個功能。

+0

這不是一個編程的問題一樣多的要求。 – millimoose 2013-02-16 13:11:15

+0

你可以在你的看法條件:如果護照到期,然後發送通知 – catherine 2013-02-16 13:13:43

回答

3

要突出管理,你可以使用類似以下(得到這個來自https://docs.djangoproject.com/en/1.2/ref/contrib/admin/):

class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    expiry_date = models.DateTimeField() 

    def colored_name(self): 
     if datetime.datetime.now() >= self.expiry_date: 
      return '<span style="color: red;">%s %s</span>' % (self.first_name, self.last_name) 
    colored_name.allow_tags = True 

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('colored_name', 'first_name', 'last_name') 

這將突出onlye在管理界面中一個collumn但可以注意到。

爲了提醒您應該創建管理命令並從cron運行它。

項目/應用程序/管理/命令/ check_expired.py:

# -*- coding: utf-8 -*- 

from django.core import management 
from django.core.mail import mail_admins 


class Command(BaseCommand): 

    def inner_run(self, *args, **options): 
     expired_items = Model.objects.filter(expiry_date__lte=datetime.datetime.now()) 
     message = some_message_formatter(expired_items) 

     mail_admins(subject='Alerts on my Project!', message=message) 

的cron:

8 3 */15 * * cd /path/to/project && echo 'Activate virtual env if needed' && PYTHONPATH='Additional_python_path' DJANGO_SETTINGS_MODULE=your_project.settings django-admin.py check_expired 
+0

這正是我所需要的。輝煌。 – roykasa 2013-02-18 09:54:50

1

如果您想要在admin的列表顯示中突出顯示該項目的路線,則需要覆蓋admin/change_list_results.html模板。從該文件中的代碼片段看起來是這樣的:

{% for result in results %} 
{% if result.form.non_field_errors %} 
<tr><td colspan="{{ result|length }}">{{ result.form.non_field_errors }}</td></tr> 
{% endif %} 
<tr class="{% cycle 'row1' 'row2' %}"> 
    {% for item in result %}{{ item }}{% endfor %} 
</tr> 
{% endfor %} 

你可以嘗試添加代碼來檢查,如果結果項目有你要找的屬性和使用不同的類比ROW1或2行。只要記住這是一個用於管理員中所有對象的文件。

要發送電子郵件,您可以編寫一個獨立的腳本,由cron調用。確保將virtualenv的路徑添加到sys.path中,並將os.environ [「DJANGO_SETTINGS_MODULE」]設置爲您的項目設置。之後,它應該是一個簡單的查詢來查找過期的對象和使用django.core.mail.MailMessage發送郵件。 https://docs.djangoproject.com/en/1.4/topics/email/

+0

謝謝瑞安。我會努力的。謝謝您的幫助。 – roykasa 2013-02-16 13:22:43