【发布时间】:2020-12-01 13:44:41
【问题描述】:
假设我有两个模型:类别和产品
class Category(models.Model):
name = models.CharField(max_length='255')
parent = models.ForeignKey("self", on_delete=models.CASCADE, null=True, related_name='children', related_query_name='child')
class Product(models.Model):
name = models.CharField(max_length='255')
category = models.ManyToManyField(Category)
我的数据库中有大约 600 万种产品和 12k 个类别。每个产品都有多个类别。我想按 category_id 过滤产品:
categories = [1, 5, 6, 7, ....]
products = Product.objects.filter(category__pk__in=categories)
过滤 MtM 字段可以返回重复项,所以我需要 distinct()。但使用 distict fitering 最多可能需要 15 秒。有什么方法可以更快地获得不同的产品?我会很感激的
【问题讨论】:
标签: django-models django-rest-framework django-orm