У меня есть ряд моделей, похожих на эту:
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())
Проблема в том, что я не знаю, как у вас дела. кто-нибудь может мне помочь?