Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模型中的字段为';未定义';inside objects.filter()_Python_Django - Fatal编程技术网

Python 模型中的字段为';未定义';inside objects.filter()

Python 模型中的字段为';未定义';inside objects.filter(),python,django,Python,Django,在我的模型中,我有一个名为“expire\u date”的日期字段。我有一个查询我的模型的函数: def date_delta_days(earlier_date, later_date): return (later_date - earlier_date).days class Command(BaseCommand): help = """ Manages list expiration. If lists are expiring soon, sends an ema

在我的模型中,我有一个名为“expire\u date”的日期字段。我有一个查询我的模型的函数:

def date_delta_days(earlier_date, later_date):
    return (later_date - earlier_date).days

class Command(BaseCommand):
    help = """ Manages list expiration.  If lists are expiring soon, sends an email warning the list owners
               If a list has expired, the .pck file associated with that list is deleted
           """

    def handle(self, *args, **options):
        now = datetime.now()
        expiring_lists = ListEntry.objects.filter(
            date_delta_days(now, expire_date) # <------ error is on this line
        )
以下是相关的错误代码:

File "/home/jared/projects/list_expiration/list_app/management/commands/check_lists.py", line 19, in handle
    date_delta_days(now, expire_date)
NameError: global name 'expire_date' is not defined

在过滤器中,传递一个位置参数-可能是一个timedelta,它是从time_delta_天返回的。在该函数中,您使用两个变量:datetime对象,由datetime.datetime.now()返回,以及。。。这是你问题的原因。您正在传递一个名为expiration\u date的变量,该变量在当时很可能尚未定义

您可能想做的是使用命名参数,因为这是filter()的工作原理。因为datetime字段是可比较的,所以可以使用_gt和_lt关键字(以及其他支持的逻辑运算符)。要查找将在30天内过期的ListEntry对象,请使用:

month_from_now = datetime.datetime.now() + datetime.timedelta(days=30)
ListEntry.objects.filter(expiration_date__lt=month_from_now,
                         expiration_date__gt=datetime.datetime.now())

我添加了第二个筛选器参数,只是为了确保您没有查看已经过期的ListEntry对象。您可以轻松地根据需要修改此代码。

我们可以获得完整的回溯吗?
month_from_now = datetime.datetime.now() + datetime.timedelta(days=30)
ListEntry.objects.filter(expiration_date__lt=month_from_now,
                         expiration_date__gt=datetime.datetime.now())