如何解决Django REST Framework如何有效过滤计算模型属性
我有is_expired
的模型属性,该属性通过将当前时间与另一个称为True
的字段进行比较而简单地返回False
或Saas_expire_date
。
@ property
def is_expired(self):
current_time = timezone.Now()
return current_time > self.saas_expire_date
如何有效地对此进行过滤。.我担心使用For
循环会严重影响响应时间,尤其是在有大量数据的情况下
class StorePublicAPI(APIView):
"""
Store API for client side
"""
def get(self,request):
"""
`Get Stores`
"""
raw_stores = Store.objects.filter(
is_approved=True,is_active=True)
stores = []
for store in raw_stores:
if not store.is_expired:
stores.append(store)
serializer = StorePublicSerializer(stores,many=True)
return Response(serializer.data,status=status.HTTP_200_OK)
或者,如果您找到一种更有效的方法来计算用户是否已付款,可以帮我吗? Saas_expire_date
字段何时达到当前日期时间
解决方法
不确定自己的saas_expire_date是什么样子,但是假设它是DateField或DateTimeField,则可以使用an lte
filter过滤Store
模型,如下所示:
class StorePublicAPI(APIView):
"""
Store API for client side
"""
def get(self,request):
"""
`Get Stores`
"""
stores = Store.objects.filter(
saas_expire_date__lte=timezone.now(),is_approved=True,is_active=True)
serializer = StorePublicSerializer(stores,many=True)
return Response(serializer.data,status=status.HTTP_200_OK)
请确保正确实施了时区配置,否则可能会遇到几个小时的时间将对象退还的问题。检查文档中的时区here
,实际上,您正在为saas_expiry_date
属性中的is_expired
字段进行时间过滤。为什么不在过滤器中也这样做呢?
class StorePublicAPI(APIView):
"""
Store API for client side
"""
def get(self,request):
"""
`Get Stores`
"""
current_time = timezone.now()
queryset = Store.objects.filter(
is_approved= True,is_active=True,saas_expire_date__lt=current_time,)
serializer = StorePublicSerializer(queryset,status=status.HTTP_200_OK)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。