-2

我有一个包含到期日期的模型。该字段如下所示:

passport_date_of_expiry = TodayOrLaterDateField('到期日期',)

此字段显示在管理员的列表显示中。我想要完成的是,当到期日期为到期日期 6 个月或更短时,该项目在管理员的列表显示中以红线突出显示。或者。甚至发生这种情况时,让系统发送电子邮件作为警报。我怎样才能轻松实现这一目标。数据库中已经有大量数据,这是我想添加到这个系统的一个功能。

4

2 回答 2

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

这将在管理界面中仅突出显示一个列,但可以注意到这一点。

要提醒您应该创建管理命令并从 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)

计划:

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
于 2013-02-16T18:19:48.047 回答
1

如果您想在管理员的列表显示中突出显示项目,您需要覆盖 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 或 row2 不同的类。请记住,这是一个用于管理中所有对象的文件。

对于发送电子邮件,您可以编写一个由 cron 调用的独立脚本。确保将 virtualenv 的路径添加到 sys.path 并将 os.environ["DJANGO_SETTINGS_MODULE"] 设置为您的项目设置。之后,查找过期对象并使用 django.core.mail.MailMessage 发送邮件应该是一个简单的查询。 https://docs.djangoproject.com/en/1.4/topics/email/

于 2013-02-16T13:09:11.450 回答