通过 Python 中的自定义函数过滤数据时出现问题 (Django)
Problem with filtering data via custom function in Python (Django)
我想从 Product
中获取 4 个随机对象 我试图通过 check_existing_id
函数和 random.randint
过滤它,我使用 while
循环来获取 4来自数据库的对象。然而这段代码在某些情况下 returns 只有 3 个对象。代码中隐藏了一个错误,我不知道我在哪里需要每次 return exacly 4 个元素。我在下面粘贴代码,它只是一个简单的函数:
def check_existing_id(list,number):
for i in range(len(list)):
if list[i] == number:
return False
return True
class GetRecommendedProducts(generics.ListAPIView):
serializer_class = ProductSerializer
def get_queryset(self):
product_id = self.kwargs['product_id']
products_length = len(Product.objects.all())
id_list = []
while len(id_list) < 4:
id = random.randint(0, products_length)
if check_existing_id(id_list, id) and id != product_id:
id_list.append(id)
return Product.objects.filter(id__in=id_list)
你可以利用sample(…)
function [Python-doc] of the random
package [Python-doc]。您可以先获取主键列表(不包括 product_id
),然后采样四个项目,然后获取 Product
s:
from random import <strong>sample</strong>
class GetRecommendedProducts(generics.ListAPIView):
serializer_class = ProductSerializer
def get_queryset(self):
id_list = list(Product.objects<strong>.exclude(</strong>
id=self.kwargs['product_id']
<strong>)</strong>.values_list('id', flat=True))
return Product.objects.filter(id__in=<strong>sample(</strong>id_list, 4<strong>)</strong>)
我想从 Product
中获取 4 个随机对象 我试图通过 check_existing_id
函数和 random.randint
过滤它,我使用 while
循环来获取 4来自数据库的对象。然而这段代码在某些情况下 returns 只有 3 个对象。代码中隐藏了一个错误,我不知道我在哪里需要每次 return exacly 4 个元素。我在下面粘贴代码,它只是一个简单的函数:
def check_existing_id(list,number):
for i in range(len(list)):
if list[i] == number:
return False
return True
class GetRecommendedProducts(generics.ListAPIView):
serializer_class = ProductSerializer
def get_queryset(self):
product_id = self.kwargs['product_id']
products_length = len(Product.objects.all())
id_list = []
while len(id_list) < 4:
id = random.randint(0, products_length)
if check_existing_id(id_list, id) and id != product_id:
id_list.append(id)
return Product.objects.filter(id__in=id_list)
你可以利用sample(…)
function [Python-doc] of the random
package [Python-doc]。您可以先获取主键列表(不包括 product_id
),然后采样四个项目,然后获取 Product
s:
from random import <strong>sample</strong>
class GetRecommendedProducts(generics.ListAPIView):
serializer_class = ProductSerializer
def get_queryset(self):
id_list = list(Product.objects<strong>.exclude(</strong>
id=self.kwargs['product_id']
<strong>)</strong>.values_list('id', flat=True))
return Product.objects.filter(id__in=<strong>sample(</strong>id_list, 4<strong>)</strong>)