Изначальная задача:
есть группа контрагентов, есть пользователи. У каждого пользователя своя сортировка контрагентов.
class Supplier(models.Model):
name = models.CharField(max_length=512)
short_name = models.CharField(max_length=100, unique=True)
class SupplierPosition(models.Model):
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
position = models.PositiveIntegerField()
Надо получить всех контрагентов с сортировкой по позиции. Если позиции нет, то получить контрагента все равно. В общем sql:
SELECT * FROM accounting_supplier as s
LEFT JOIN ( SELECT * FROM accounting_supplierposition WHERE user_id = 1 ) as sp
on sp.supplier_id = s.id;
Нашел похожий вопрос на стэковерфлоу:
https://stackoverflow.com/questions/38060232/djang...
Сделал также, но дистинкт не работает. Попробовал в raw:
objects.raw("SELECT * FROM accounting_supplier as s LEFT JOIN
( SELECT position, supplier_id FROM accounting_supplierposition WHERE user_id = %s ) as sp
on sp.supplier_id = s.id ORDER BY sp.position", [request.user])
Но почему-то не работает сортировка. Если делаю запрос напрямую в БД – все ок. В Джанге получается одинаковая сортировка для всех пользователей.