Ich muss eine Menge Daten aus meiner Datenbank effizient in eine CSV exportieren, und ich habe ein Problem mit einem ManyToMany-Feld. Nehmen wir an, mein Modell ist Song
und ich verwende ein ManyToMany-Feld namens Tags
. Ein Song
kann mehrere Tags
haben, wie zum Beispiel ‚Rock‘, ‚Pop‘, ‚traurig‘ ...Django values () -Methode mit ManyToMany-Feld: Es gibt nur ein Element zurück
ich, wie etwas tun möchte:
>>> songs_tags = Song.objects.filter(artist_id=5).values('id', 'tags__name')
Und dann würde ich gerne etwas bekommen wie:
>>> songs_tags
[{'id': 1L, 'tags__name':['rock', 'pop', 'happy']}, {'id': 2L, 'tags__name': ['metal', 'angry', 'epic']}, ...]
aber was ich eigentlich ist:
>>> songs_tags
[{'id': 1L, 'tags__name': 'rock'}, {'id': 2L, 'tags__name': 'metal'}, ...]
Warum?
Ich habe überprüft, dass diese Elemente in der Tat mehr als ein Tag haben, aber Werte() nur eine von ihnen, anstatt alle von ihnen.
Hinweis:
Ich versuchte for song in Song.objects.filter(artist_id=5)
zu iterieren und jede song.tags.all()
zu lesen. Aber es ist sloow ...
Ich habe auch versucht, prefetch_related()
(https://docs.djangoproject.com/en/1.9/ref/models/querysets/#prefetch-related) zu verwenden. Was ich getan habe ist, for song in Song.objects.filter(artist_id=5).prefetch_related('tags')
zu iterieren und jedes song.tags.all()
zu lesen, aber es war auch langsam. Tatsächlich habe ich keinen Unterschied zwischen der Iteration Song.objects.filter(artist_id=5)
und Song.objects.filter(artist_id=5).prefetch_related('tags')
bemerkt.
Mögliche duplizierte Frage http://stackoverflow.com/questions/12139923/all-the-values- von-der-vielen-zu-vielen-feld-django – trinchet