Hat Django queryset values_list Rückkehr ein list-Objekt?
Habe ich eine Django-app, mit der Nutzer Fotos und andere Kommentare unter den Fotos.
Wenn ein Kommentar übrig ist, muss ich Benachrichtigen:
- Jeder andere, schrieb in diesem thread
- Der Besitzer des Fotos, im Falle dass Sie sind nicht enthalten in (1)
Für (1), weiß ich:
#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]
Nächsten, für (2), versuche ich:
all_relevant_ids = all_commenter_ids.append(which_photo.owner_id)
all_relevant_ids = list(set(all_relevant_ids))
Habe ich am Ende eine Fehlermeldung:
'ValuesListQuerySet' - Objekt hat kein Attribut 'append'
Ich finde das seltsam, denn ich bin extra eine values_list.
Nicht, dass ein list-Objekt, und in diesem Fall sollte nicht das Attribut append
in diesem Szenario funktionieren? Erklären Sie bitte, was ist falsch, und schlagen Sie alternativen vor.
InformationsquelleAutor Hassan Baig | 2016-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
values_list
Methode gibt eineValuesListQuerySet
. Das bedeutet, es hat die Vorteile von einem queryset. Zum Beispiel ist es faul, so dass Sie nur Holen die ersten 25 Elemente aus der Datenbank, wenn Sie schneiden es.Konvertieren einer Liste an, nutzen
list()
.Könnten Sie in der Lage zu starten den queryset von Ihrem
User
Modell statt mitvalues_list
. Sie haben nicht gezeigt, Ihre Modelle, so dass der folgende code ist eine Vermutung:'NoneType' object is not iterable
auf der Linieall_relevant_ids = list(set(all_relevant_ids))
moment poste ich den ersten Kommentar nach der Anwendung zu beheben. Werde ich brauchen, um einen tieferen Einblick in dieses.Beachten Sie, dass die
append
Methode gibtNone
. Sie wollen einfachall_commenter_ids.append(which_photo.owner_id)
- weisen Sie nicht das Ergebnis zuall_relevant_ids
.nebenbei, sollte ich enclude die values_list Scheibe nehme ich die
set
als gut, da einige ids kann wiederholt werden? Re: der Benutzer Objekte der route, photocomment ist nicht Teil der User, daher kann das nicht tun. Danke für den Vorschlag aber.Ob Sie schneiden oder nicht, ist bis zu Ihnen. Seit Sie anrufen
set()
auf das Ergebnis, können Sie am Ende mit weniger als 25 Einträge in Ihrer endgültigen Liste. Wenn Sie brauchen, 25 Elemente, dann könnten Sie brauchen, um zu konvertieren zu einem Satz, dann wieder auf eine Liste, dann in Scheiben schneiden. Jedoch holt Sie alle ids aus der Datenbank, die könnte langsam sein. Ich bin mir nicht sicher, wie könnte man die ersten 25 eindeutige ids, die mit dem ORM.Wie es scheint, schlecht benannte Methode für mich, nicht verwunderlich, es gibt so viel Verwirrung.
InformationsquelleAutor Alasdair