首页 > 解决方案 > 在信号上比较两个 django 的 DateTimeField

问题描述

我想在将类保存到数据库之前使用信号来检查类的值。我有以下功能

@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 最好的是什么?这是进行此类检查的最佳方式吗?

谢谢

标签: pythondjango

解决方案


您应该改用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而是模型的实例。


推荐阅读