Подтвердить что ты не робот

Django - создание последнего объекта, одновременные фильтры

Извинения, я совершенно новичок в Django и Python.

У меня есть 2 вопроса. Во-первых, как бы я хотел получить последний объект, созданный (или самый высокий pk) в списке объектов? Например, я знаю, что для получения первого объекта я мог бы использовать следующее:

list = List.objects.all()[0]

Есть ли способ получить длину List.objects? Я пробовал List.objects.length, но безрезультатно.

Во-вторых, можно ли создавать одновременные фильтры или комбинировать списки? Вот пример:

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number)

Мне нужно что-то вроде выше, но больше похоже:

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number or home_phone=number)

Каков правильный синтаксис, если он есть?

4b9b3361

Ответ 1

Я еще не пробовал, но я бы посмотрел на оператор last() на QuerySets:

последняя (имя_поль = нет)

Возвращает последний объект в таблицу, по дате, используя поле_имя в качестве поля даты.

В этом примере возвращается последняя запись в таблице, согласно Поле pub_date:

Entry.objects.latest( 'pub_date')

Если ваша модель Meta указывает get_latest_by, вы можете оставить аргумент field_name для last(). Django будет использовать поле, указанное в get_latest_by по умолчанию.

Как get(), последний() повышает DoesNotExist, если объект не существуют с заданными параметрами.

Примечание last() существует исключительно для удобство и удобочитаемость.

И модельные документы на get_latest_by:

get_latest_by

Options.get_latest_by

Имя объекта DateField или DateTimeField в модели. Это указывает поле по умолчанию для использования в последнем методе диспетчера модели.

Пример:

get_latest_by = "order_date"

Подробнее см. в документах для последних().

Изменить: Уэйд имеет хороший ответ на операторе Q().

Ответ 2

это работает!

Model.objects.latest('field') - поле может быть id. это будет последний id

Ответ 3

Для основного первичного ключа попробуйте следующее:

List.objects.order_by('-pk')[0]

Обратите внимание, что использование pk работает независимо от фактического имени поля, определенного как ваш первичный ключ.

Ответ 4

Поскольку Django 1.6 - последний

last()

Работает как first(), но возвращает последний объект в наборе запросов.

Возвращает последний объект, соответствующий запросу, или None, если нет соответствующего объекта. Если QuerySet не имеет определенного порядка, то запрос автоматически упорядочивается с помощью первичного ключа.

list = List.objects.last() дает вам последний созданный объект

Ответ 5

Вы можете использовать метод count() для набора запросов, чтобы получить количество элементов.

list = List.objects.all()
list.count()

Аргументы для фильтрации "AND" совместно. Если вам нужно, чтобы фильтры OR отображали объекты Q. http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

Ответ 6

альтернатива для последнего созданного объекта:

List.objects.all()[List.objects.count()-1]

Необходимо добавить AssertionError для случая, когда в списке нет элементов.

except AssertionError:
   ...