I had a sniff around SO and couldn't find this, but I am sure it is here somewhere. Apologies for this potential double post!
If I have this code:
return Story.objects.filter(user=request.user.id).order_by('-create_date')
and say Story has, um, a "description" field, and I just want that description field, no need for the db to send anything else back with my result, how do I limit the query to just that?
That is, how do I generate this SQL:
select description from story where user_id = x order by create_date desc
(where x is the request.user.id value, of course)
Mine is simpler to implement, and you can pass a list, dict, or anything that can be converted into json. In Django 1.10 and above, there's a new ArrayField field you can use.
Use values()
or values_list()
.
If you use values()
, You'll end up with a list of dictionaries (technically a ValuesQuerySet
)
instance = MyModel.objects.values('description')[0]
description = instance['description']
If you use values_list()
, you'll end up with a list of tuples
instance = MyModel.objects.values_list('description')[0]
description = instance[0]
Or if you're just getting one value like in this case, you can use the flat=True
kwarg with values_list
to get a simple list of values
description = MyModel.objects.values_list('description', flat=True)[0]
See the official documentation
Use the only method. Please read the documentation
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With