Django 明显不与 Postgres 一起工作
Django distinct not working with Postgres
我正在配置 API 来提取结果列表。这些物品是衣服'Products',其中有几件'Variations'。
我正在尝试使用 distinct 来确保查询集只有 returns 独特产品的列表 - 而不是由于许多变化而重复多次的相同产品.
过去,我对产品的主键 (id) 使用了 distinct。但是,下面的代码不起作用。
当我尝试使用 "distinct" 时出现 500 错误。没有它-我没有错误。我无法在本地进行测试,因为 SQLite 不喜欢 distinct。我正在使用
class InternalListView(APIView):
renderer_classes = (JSONRenderer, )
def get(self, request, *args, **kwargs):
filters = {}
for key, value in request.GET.items():
key = key.lower()
if key in countmatch:
lookup, val = internalmatch[key](value.lower())
filters[lookup] = val
qset = (
Product.objects
.filter(**filters)
.distinct('id')
.order_by('-rating')
.values('name', 'brand', 'rating')
.annotate(
price=F('variation__price__price'),
id=F('pk'),
vari=F('variation'),
)
)
for i in qset:
i['likes'] = random.randint(500, 1000)
print qset
return Response(qset.all())
啊,刚想通了。
根据 django 文档 (https://docs.djangoproject.com/en/1.9/ref/models/querysets/#distinct)
两者不同且 order_by 必须相同。
所以这不起作用:
.distinct('id')
.order_by('-rating')
但这会起作用:
.distinct('id')
.order_by('id')
这最有效:
.distinct('rating', 'id')
.order_by('-rating')
使用选项 3 有什么问题吗?
我正在配置 API 来提取结果列表。这些物品是衣服'Products',其中有几件'Variations'。
我正在尝试使用 distinct 来确保查询集只有 returns 独特产品的列表 - 而不是由于许多变化而重复多次的相同产品.
过去,我对产品的主键 (id) 使用了 distinct。但是,下面的代码不起作用。
当我尝试使用 "distinct" 时出现 500 错误。没有它-我没有错误。我无法在本地进行测试,因为 SQLite 不喜欢 distinct。我正在使用
class InternalListView(APIView):
renderer_classes = (JSONRenderer, )
def get(self, request, *args, **kwargs):
filters = {}
for key, value in request.GET.items():
key = key.lower()
if key in countmatch:
lookup, val = internalmatch[key](value.lower())
filters[lookup] = val
qset = (
Product.objects
.filter(**filters)
.distinct('id')
.order_by('-rating')
.values('name', 'brand', 'rating')
.annotate(
price=F('variation__price__price'),
id=F('pk'),
vari=F('variation'),
)
)
for i in qset:
i['likes'] = random.randint(500, 1000)
print qset
return Response(qset.all())
啊,刚想通了。
根据 django 文档 (https://docs.djangoproject.com/en/1.9/ref/models/querysets/#distinct)
两者不同且 order_by 必须相同。
所以这不起作用:
.distinct('id')
.order_by('-rating')
但这会起作用:
.distinct('id')
.order_by('id')
这最有效:
.distinct('rating', 'id')
.order_by('-rating')
使用选项 3 有什么问题吗?