[Django]-Django โ€“ Getting last object created, simultaneous filters

82๐Ÿ‘

โœ…

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.

๐Ÿ‘คhughdbrown

51๐Ÿ‘

this works!

Model.objects.latest('field') โ€“ field can be id. that will be the latest id

๐Ÿ‘คHarry

29๐Ÿ‘

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

๐Ÿ‘คpunkrockpolly

20๐Ÿ‘

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.

๐Ÿ‘คjcdyer

4๐Ÿ‘

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

๐Ÿ‘คWade

0๐Ÿ‘

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:
   ...
๐Ÿ‘คRolandoAmir

0๐Ÿ‘

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.

๐Ÿ‘คSphynx-HenryAY

0๐Ÿ‘

Try this:

InsertId= (TableName.objects.last()).id
๐Ÿ‘คMerrin K

Leave a comment