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

これにより、管理インターフェイスで 1 つの列のみが強調表示されますが、これに気付くことができます。

警告するには、管理コマンドを作成して 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 に答える