【发布时间】:2018-06-07 02:45:29
【问题描述】:
我正在使用 Django REST 框架,并且在我使用 Counter() 函数的那一行中,有一个 post API 我面临速度问题。
@api_view(["POST"])
def calculate_stuff(request):
t1 = time.time()
machine_type = request.data['machine_type']
machine_nos = Machine.objects.filter(machine_type=machine_type).values_list('machine_no', flat=True)
query = Performance.objects.filter(Q(power=100) | Q(power=192),machine_no__in=machine_nos,
).values_list("machine_no", "power")
t2 = time.time()
print t2 - t1 # is around 0.2 seconds
count_192_100 = Counter(query)
t3 = time.time()
print t3 - t2 # is around 1.3 seconds
模型是这样的:
class Machine(models.Model):
machine_type = models.CharField(null=True, max_length=10)
machine_no = models.IntegerField(null=True)
store_code = models.IntegerField(null=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now = True)
class Performance(models.Model):
machine_no = models.IntegerField(null=True)
power = models.IntegerField(null=True)
store_code = models.IntegerField(null=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
这个项目正在生产中运行,由于某种原因,两个模型之间没有使用外键。我想在这里实现的是首先:从某个 machine_type 的“Machine”模型中获取 machine_no。第二:我想得到每台机器多少次。在“性能”模型中具有功率 = 100 和功率 = 192。 附加信息:我正在使用 Django 1.11、python 2.7.10、postgresql。
【问题讨论】:
标签: python django python-2.7