user3214546
user3214546

Reputation: 6831

How can i get the string representation from queryset in django

I have the queryset like this

qs = User.objects.all()

I am converting to dict like this

qs.values('id', 'username')

but instead of username i want to get the string representation.

something like

qs.values('id', '__str__')

Upvotes: 10

Views: 11028

Answers (1)

aumo
aumo

Reputation: 5574

You cannot, values can only fetch values stored in the database, the string representation is not stored in the database, it is computed in Python.

What you could do is:

qs = User.objects.all()
# Compute the values list "manually".
data = [{'id': user.id, '__str__': str(user)} for user in qs]

# You may use a generator to not store the whole data in memory,
# it may make sense or not depending on the use you make
# of the data afterward.
data = ({'id': user.id, '__str__': str(user)} for user in qs)

Edit: on second thought, depending on how your string representation is computed, it may be possible to use annotate with query expressions to achieve the same result.

Upvotes: 9

Related Questions