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一样被链接