Django REST Framework 如何高效过滤计算模型 属性
Django REST Framework How to Efficiently Filter Calculate Model property
我有一个 属性 的 is_expired
模型,通过将当前时间与另一个名为 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
您实际上是在对 is_expired
属性 中的 saas_expiry_date
字段进行时间过滤。为什么不在过滤器中也这样做?
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, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
我有一个 属性 的 is_expired
模型,通过将当前时间与另一个名为 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
您实际上是在对 is_expired
属性 中的 saas_expiry_date
字段进行时间过滤。为什么不在过滤器中也这样做?
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, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)