Есть некая модель:
class ModelA(models.model):
field1=models.PositiveIntegerField(default=0)
field2=models.TextField(max_length=5000)
....
field35=models.asdfasds()
Моделька содержит несколько тысяч таких вот не маленьких строк.
Нужно сделать queryset, да такой, что бы сортировка была по возрастанию, но все строчки, где field1==0 - были в конце.
У меня пока в уме два варианта:
Первый - разбить на части, преобразовать в списки и объединить:
q1=list(ModelA.objects.filter(field1__gt=0).order_by(“field1”)
q2=list(ModelA.objects.filter(field1=0)
return q1+q1
Основная проблема в том, что такой подход сожрет слишком много памяти. При таких больших строчках, большой таблице и большом количестве посетителей этот подход не реален.
Второй вариант - Raw-sql:
“select * from app_modela where field1<>0 order by field1 asc
union
select * from app_modela where field1=0;”
из минусов - заточенность под конкретную субд, чего не хотелось бы.
Идеальным вариантом было бы разбить на два queryset-а, не затягивая их в список, и объединить. Но, погуглив не нашел какого-то способа объединить их.
Может кто-нибудь уже сталкивался с подобной задачей. Кто как решил?