Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django models: get list of id

How do i get a list of all id/primary key for a table. Say i have this table:

class Blog(models.Model)
  title = models.CharField()
  body = models.CharField()
  author = models.ForeignKey(Author)

assume the field author is an Author object. I want to get all the ids of Blog where author=author

i know i can use

    blogs = Blog.objects.filter(author=author)

and get all the blog objects in a list form, but how do i get the list IDS/PK? Similar to "Select id from Blog where Author=author"

like image 630
ibaguio Avatar asked Mar 02 '14 06:03

ibaguio


4 Answers

You can do this using values_list method.

blogs = Blog.objects.filter(author=author).values_list('id', flat=True)

See more at the Django queryset documentation.

like image 97
Stepan Grigoryan Avatar answered Nov 13 '22 04:11

Stepan Grigoryan


Blog.objects.filter(author=author).values_list('id', flat=True)

values_list() gives a list of rows, each row a tuple of all of the fields you specify as arguments, in order. If you only pass a single field in as an argument, you can also specify flat=True to get a plain list instead of a list of tuples.

like image 34
Andrew Gorcester Avatar answered Nov 13 '22 05:11

Andrew Gorcester


Blog.objects.filter(author=author).values_list('pk', flat=True)

Put pk instead id, just for best practices.

like image 10
Jorge Alberto Avatar answered Nov 13 '22 05:11

Jorge Alberto


values_list it returns tuples when iterated over. Each tuple contains the value from the respective field or expression passed into the values_list().

author = Blog.objects.filter(author=author)
ids    = author.values_list('pk', flat=True)

# list method get ids without parse the returning queryset

print(list(ids))
like image 4
Sahir Saiyed Avatar answered Nov 13 '22 05:11

Sahir Saiyed