J'ai une application Django où les utilisateurs publient des photos et d'autres laissent des commentaires sous les photos.
Lorsqu'un commentaire est laissé, je dois informer:
Pour (1), je fais:
#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]
Ensuite, pour (2), j'essaye:
all_relevant_ids = all_commenter_ids.append(which_photo.owner_id)
all_relevant_ids = list(set(all_relevant_ids))
Je me retrouve avec une erreur:
L'objet 'ValuesListQuerySet' n'a pas d'attribut 'append'
Je trouve cela étrange, car j'extrait un values_list.
N'est-ce pas un objet liste, et dans ce cas, l'attribut append
ne devrait-il pas fonctionner dans ce scénario? Veuillez expliquer ce qui ne va pas et suggérer des alternatives.
La méthode values_list
Renvoie un ValuesListQuerySet
. Cela signifie qu'il présente les avantages d'un ensemble de requêtes. Par exemple, il est paresseux, donc vous ne récupérez les 25 premiers éléments de la base de données que lorsque vous le découpez.
Pour le convertir en liste, utilisez 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)
Vous pourrez peut-être démarrer le jeu de requêtes à partir de votre modèle User
au lieu d'utiliser values_list
. Vous n'avez pas montré vos modèles, le code suivant est donc une supposition:
from Django.db.models import Q
commenters = User.objects.filter(Q(id=which_photo.owner_id)|Q(photocomment=which_photo))