Django根据检索到的值进行过滤

时间:2015-09-15 07:36:16

标签: python django django-filter

我的模型包含一些参数,如下所示

{ "user_name" : "john",
  "enter_time" : 1442257970.509184,
   "frequency" : 30
}

我需要编写一个过滤函数,最好使用django-filter或任何其他pythonic-way,以便我可以过滤掉那些记录在哪里

def test():
 cur_time = time.time() 
 if cur_time >= enter_time + frequency:
  return True
 return False

目前在我的views.py中,我可以根据名称和单个值进行过滤。 例如,

records = UserRecord.objects.filter(token=user_token, user_name=name, status='active').distinct()
serializer = RecordSerializer(records, many=True)

我不确定,如何根据test()中定义的测试条件过滤掉。一种解决方法是获取serializer.data并处理OrderedDictionaries列表以过滤掉内容。但我正在寻找django这样做的方式。

2 个答案:

答案 0 :(得分:2)

你可以use F expressions in filters。在你的情况下:

trait HasWings {
  def wingType0: String = "Thin"
  val wingType = wingType0
}

class Bee extends HasWings {
  override def wingType0 = "Translucent and " + super.wingType0
}

这种方式在SQL中完成过滤,你不需要在Python端做任何事情。

如果Django在定义带注释表达式的类型时遇到问题,请在注释中查看output_field kwarg

答案 1 :(得分:0)

如果你真的,真的想直接这样做,有一种方法,但它将在应用程序级别完成,而不是在数据库级别。你可以简单地制造这样的发电机:

records = (record for record in records if test(record))

但这真的很糟糕,你应该避免它。

更好的解决方案是重写测试条件,因此它将使用django queryset过滤,就像Ivan的回答中提到的那样。