Django - Getting last object created, simultaneous filters

PythonDjangoFilterDjango Views

Python Problem Overview


Apologies, I am completely new to Django and Python.

I have 2 questions. First, how would I go about getting the last object created (or highest pk) in a list of objects? For example, I know that I could use the following to get the first object:

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

Is there a way to get the length of List.objects? I've tried List.objects.length but to no avail.

Second, is it possible to create simultaneous filters or combine lists? Here is an example:

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

I want something like the above, but more like:

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

What is the correct syntax, if any?

Python Solutions


Solution 1 - Python

I haven't tried this yet, but I'd look at the latest() operator on QuerySets:

> latest(field_name=None) > > Returns the latest object in the > table, by date, using the field_name > provided as the date field. > > This example returns the latest Entry > in the table, according to the > pub_date field: > > Entry.objects.latest('pub_date') > > If your model's Meta specifies > get_latest_by, you can leave off the > field_name argument to latest(). > Django will use the field specified in > get_latest_by by default. > > Like get(), latest() raises > DoesNotExist if an object doesn't > exist with the given parameters. > > Note latest() exists purely for > convenience and readability.

And the model docs on get_latest_by:

> get_latest_by > > Options.get_latest_by > > The name of a DateField or DateTimeField in the model. This specifies the default field to use in your model Manager's latest method. > > Example: > > get_latest_by = "order_date" > > See the docs for latest() for more.

Edit: Wade has a good answer on Q() operator.

Solution 2 - Python

this works!

Model.objects.latest('field') - field can be id. that will be the latest id

Solution 3 - Python

Since Django 1.6 - last

last()

Works like first(), but returns the last object in the queryset.

Returns the last object matched by the queryset, or None if there is no matching object. If the QuerySet has no ordering defined, then the queryset is automatically ordered by the primary key.

list = List.objects.last() gives you the last object created

Solution 4 - Python

For the largest primary key, try this:

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

Note that using pk works regardless of the actual name of the field defined as your primary key.

Solution 5 - Python

You can use the count() method on a query set the get the number of items.

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

Arguments to filter are "AND"ed together. If you need to do OR filters look at Q objects. http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

Solution 6 - Python

alternative for the latest object created:

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

It is necessary to add an AssertionError for the case when there are no items in the list.

except AssertionError:
   ...

Solution 7 - Python

I am working on Django version is 1.4.22, neither last nor lastet is working. My way to solve with minimum db loading is like:

latest = lambda model_objects, field : model_objects.values_list( field, flat = True ).order_by( "-" + field )[ 0 ]
latest_pk = latest( List.objects, "pk" )

This function accepts query_set as input.

You may bind this function dynamically by doing:

import types
List.objects.latest = types.MethodType( latest, List.objects )

Then you should be able to get the last object by this latest pk easily.

Solution 8 - Python

Try this:

InsertId= (TableName.objects.last()).id

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionzdynView Question on Stackoverflow
Solution 1 - PythonhughdbrownView Answer on Stackoverflow
Solution 2 - PythonHarryView Answer on Stackoverflow
Solution 3 - PythonpunkrockpollyView Answer on Stackoverflow
Solution 4 - PythonjcdyerView Answer on Stackoverflow
Solution 5 - PythonWadeView Answer on Stackoverflow
Solution 6 - PythonRolandoAmirView Answer on Stackoverflow
Solution 7 - PythonSphynx-HenryAYView Answer on Stackoverflow
Solution 8 - PythonMerrin KView Answer on Stackoverflow