I have a Django app where users post photos, and other leave comments under the photos.
When a comment is left, I need to notify:
For (1), I do:
#I slice by 25 because I arbitrarily deem anyone beyond that irrelevant. all_commenter_ids = PhotoComment.objects.filter(which_photo=which_photo).order_by('-id').values_list('submitted_by', flat=True)[:25]
Next, for (2), I try:
all_relevant_ids = all_commenter_ids.append(which_photo.owner_id) all_relevant_ids = list(set(all_relevant_ids))
I end up with an error:
'ValuesListQuerySet' object has no attribute 'append'
I find this strange, because I'm extracting a values_list.
Isn't that a list object, and in that case, shouldn't the attribute append
work in this scenario? Please explain what's wrong, and suggest alternatives.
values_list() This is similar to values() except that instead of returning dictionaries, it returns tuples when iterated over. Each tuple contains the value from the respective field or expression passed into the values_list() call — so the first item is the first field, etc.
The filter() method is used to filter you search, and allows you to return only the rows that matches the search term.
A QuerySet is, in essence, a list of objects of a given Model. QuerySets allow you to read the data from the database, filter it and order it.
A QuerySet is a collection of data from a database. A QuerySet is built up as a list of objects. QuerySets makes it easier to get the data you actually need, by allowing you to filter and order the data.
The values_list
method returns a ValuesListQuerySet
. This means it has the advantages of a queryset. For example it is lazy, so you only fetch the first 25 elements from the database when you slice it.
To convert it to a list, use list()
.
all_commenter_ids = PhotoComment.objects.filter(which_photo=which_photo).order_by('-id').values_list('submitted_by', flat=True)[:25] all_commenter_ids = list(all_commenter_ids)
You might be able to start the queryset from your User
model instead of using values_list
. You haven't shown your models, so the following code is a guess:
from django.db.models import Q commenters = User.objects.filter(Q(id=which_photo.owner_id)|Q(photocomment=which_photo))
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