Моя цель - заказать набор запросов по последнему измененному.Я искал решение и нашел атрибут "xmin" ( 1 ).Я не мог найти, как получить доступ к этому «псевдо» столбцу, что заставило меня задуматься об «аннотировании» каждого xmin из набора запросов с использованием необработанного SQL, так как работает следующий SQL:
SELECT xmin, * FROM media ORDER BY xmin::text::bigint;
Мои попытки былиследующие три:
Применение необработанного SQL к набору запросов Я знаю, что что-то не так, поскольку SQL применяется ко всей таблице, а не только к текущему набору запросов:
mediaQS = Media.objects.filter(id__in=mediaIDList)
for media in mediaQS.annotate(xmin=RawSQL("SELECT xmin FROM media ;")):
print "media.xmin",media.xmin`
При возникновении ошибки TypeError: __init __ () принимает как минимум 3 аргумента (дано 2)
Моя вторая и третья попытки основаны на этой проблеме (Django 2.1)
for media in mediaQS.extra(select={'my_xmin': 'xmin'}):
print "media.my_xmin",media.my_xmin
Что дает
django.db.utils.ProgrammingError: column "xmin" does not exist
LINE 1: SELECT (xmin) AS "my_xmin", "media"."id", "media"."path_id",...
^
HINT: There is a column named "xmin" in table "media", but it cannot be referenced from this part of the query.
и
from django.db.models import Expression
class XMin(Expression):
output_field = models.PositiveIntegerField()
def as_postgresql(self, compiler, connection):
return 'xmin', ()
for media in mediaQS.annotate(my_xmin=XMin()):
print "media.my_xmin",media.my_xmin
Что дает похожую ошибку:
django.db.utils.ProgrammingError: column "xmin" does not exist
LINE 1: ..."path" AS "media_path", T4."path" AS "thumbnail", xmin AS "m...
^
HINT: There is a column named "xmin" in table "media", but it cannot be referenced from this part of the query.
Если кто-то может помочь с решением для Django 1.11, я ценю.