Сравните два django DateTimeField по сигналу - PullRequest
1 голос
/ 07 февраля 2020

Я хочу использовать сигнал для проверки значений моего класса перед его сохранением в базе данных. У меня есть следующая функция

@receiver(pre_save, sender=A)
def on_pre_save_a(sender, **kwargs):
    if sender.start_date > sender.end_date:
        raise Exception('Error with dates')

, и мой класс A выглядит примерно так

class A(models.Model):
    start_date = models.DateTimeField()
    scheduled_end_date = models.DateTimeField()

Но когда я пытаюсь добавить новый объект A на странице администратора, возникает исключение , говоря, что '>' not supported between instances of 'DeferredAttribute' and 'DeferredAttribute'

Что будет лучшим для сравнения этих двух DateTimeField? И это лучший способ сделать этот вид проверок?

Спасибо

1 Ответ

2 голосов
/ 07 февраля 2020

Вместо этого следует использовать аргумент instance:

@receiver(pre_save, sender=A)
def on_pre_save_a(sender, instance=None, **kwargs):
    if instance.start_date > instance.end_date:
        raise Exception('Error with dates')

sender содержит класс модели, а instance - экземпляр модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...