Мне нужно совместить другое значение «order_by» и другое «отличное» значение.Объединение запросов в один результат (rest_views)
Я считаю, что это ограничение Postgres. Поэтому я пытаюсь сделать это с помощью двух разных запросов.
В англо- я хочу работать так:
1 (qset1) - получить список PK (в большом количестве из них (500), так как многие будут дублей)
2 (qset2) - Убедитесь, что все PK уникальны (удалить дубликаты) - окончательный список из 10 пунктов
3 (qset3) - возвращает расширенные результаты просмотра для 10 пунктов
Открыть другой метод, если этот один будет быть медленным/неэффективным.
Для справки - мои модели here.
class ProductListView(APIView):
renderer_classes = (JSONRenderer,)
def get(self, request, *args, **kwargs):
print request
user = User.objects.get(id=3)
qset1 = (
Product.objects
.filter(variation__size__stock__stock__in=[1,2], store__appactive=True, store__region=user.settings_region, **filters)
.filter(Q(gender=user.settings_gender) | Q(gender=3))
.exclude(variation__analytic__user=user)
.order_by('rating', '?')
.value('pk',)
)[:500]
qset2 = (
.distinct('pk')
)[:10]
)
qset3 = (
# READ PK's from QSET2
.values('name', 'color', 'gender')
.annotate(
price=F('variation__price__price'),
)[:10]
)
print str(qset.query)
return Response(qset3)
qset2: убедитесь, что все первичные ключи уникальны? Первичные ключи всегда уникальны по определению. – e4c5
Postgresql имеет очень мало ограничений, вы делаете запрос orj django or even, тогда часто можно использовать всю мощь postgresql. – e4c5
. Пожалуйста, разместите свои модели в строке и объясните, что вы действительно хотите отобразить , – e4c5