Администратор модели Django - сигнал светофора - PullRequest
0 голосов
/ 19 марта 2019

У меня есть ряд моделей, похожих на эту:

class Documents(models.Model):
    id = models.AutoField(primary_key=True)
    paper = models.ForeignKey(
        'Paper', models.DO_NOTHING, blank=True, verbose_name='Paper')
    date = models.DateField('Date')
    expired_date = models.DateField('Expired Date')
    alert_warning_gg = models.SmallIntegerField(
        'Alert Warning gg', blank=True, null=True)
    enable = models.BooleanField('Enable')

    def __str__(self):
        return str(self.id) or ''

    class Meta:
        managed = False
        db_table = 'Documents'

Поле бумаги состоит из внешнего ключа, который подключается к другой модели, имеющей поле под названием traffic_light.

Мне нужна функция, чтобы уведомить меня светофором (красный, желтый, зеленый), когда срок действия поля даты внутри модели истекает (желтый), срок действия истек (красный) и не истек (зеленый), сравнивая его с сегодняшней датой светофора красный и зеленый; и которые используют поле alert_warnig_gg (здесь вы вводите количество дней до того, как желтый индикатор будет отмечен).

Хотелось бы, чтобы результат функции был отмечен в поле traffic_light модели Paper.

На данный момент я протестировал эту функцию на одной модели, так что она дает мне результат в столбце ModelAdmin.

def custom_column(self, obj):
    if obj.expired_date < datetime.datetime.now():
        retval = ('red.jpg')
    else
        retval = ('green.jpg')
    return "<img src='%s' alt='%s' />" % retval

custom_column.short_description = 'Status'

Чтобы заставить его работать на всех моделях, я подумал о расширении модельного класса и вставке этой функции в него. На данный момент я попытался найти экземпляр модели, которую я использую, и поле даты крайнего срока.

class TrafficLight(Model):

    def expired_date(self):
        return 'expired_date'

    def alert_warning_gg(self):
        return 'alert_warning_gg'

    class Meta:
        abstract = True

@receiver(models.signals.post_save, sender=TrafficLight)
def expired_control(self, sender, instance, *args, **kwargs):
    instance_traffic_light(
        instance.related_model(),
        instance.paper,
        instance.expired_date(),
        instance.alert_warning_gg())

Проблема в том, что я не знаю, как у вас дела. кто-нибудь может мне помочь?

...