Django 1.11 - порядок запросов по столбцу Postgresql xmin - PullRequest
0 голосов
/ 29 ноября 2018

Моя цель - заказать набор запросов по последнему измененному.Я искал решение и нашел атрибут "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, я ценю.

...