Django/Python:如何使用模型&x27;s自定义方法??这可能吗?

Django/Python:如何使用模型&x27;s自定义方法??这可能吗?,python,django,Python,Django,我有一个带有自定义方法的模型。下面是一个例子: class MyModel(models) id = models.AutoField(primary_key=True) name = models.CharField(max_length=50) nickname = models.CharField(max_length=50) time_created = models.DateTimeField(auto_now_add=True) def sample_

我有一个带有自定义方法的模型。下面是一个例子:

class MyModel(models)
   id = models.AutoField(primary_key=True)
   name = models.CharField(max_length=50)
   nickname = models.CharField(max_length=50)
   time_created = models.DateTimeField(auto_now_add=True)

   def sample_method(self)
       right_now = datetime.now()
       created_time = self.time_created
       time2compare = timedelta(minutes=3)

       timeout = True
       if(right_now - created_time) > time2compare:
           timeout = False
       return timeout
我想做的就是做这样的事情(我知道这行不通)

queryset=MyModel.objects.filter(超时=False)


我怎样才能解决这个问题?谢谢

您不能在模型上使用自定义方法进行过滤,因为过滤器将解析为saw sql,这在某些python代码中是不可能的。尽管如此,以下几点应该可以解决您的问题:

import datetime
queryset = MyModel.objects.filter(\
     time_created__lt=(datetime.now()-datetime.timedelta(minutes=3)))

将超时测试重新实现为queryset筛选器非常简单

对于无法用Django查询语言或原始SQL表示的非常复杂的测试,您可以编写如下代码:

def sample_filter(self, method_name, arg=False)
    for i in self.objects.all():
        if getattr(self, method_name)() == arg:
            yield i
此方法将向模型的每个实例x返回一个迭代器,其中x.method_name()==arg。然而,这不能像queryset一样被链接