Veritabanımdan bir CSV'ye çok fazla veriyi verimli bir şekilde vermem gerekiyor ve ManyToMany alanında sorun yaşıyorum. Modelimin Song
olduğunu ve Tags
adlı ManyToMany alanını kullanıyorum diyelim. Bir Song
ManyToMany alanıyla Django values () yöntemi: yalnızca bir öğe döndürüyor
ben böyle bir şey yapmak istiyorum ... böyle 'kaya', 'pop', 'üzücü' gibi çeşitli Tags
, olabilir:
>>> songs_tags = Song.objects.filter(artist_id=5).values('id', 'tags__name')
Sonra bir şeyler almak istiyorum gibi:
>>> songs_tags
[{'id': 1L, 'tags__name':['rock', 'pop', 'happy']}, {'id': 2L, 'tags__name': ['metal', 'angry', 'epic']}, ...]
Ancak, ben aslında elde ediyoruz:
>>> songs_tags
[{'id': 1L, 'tags__name': 'rock'}, {'id': 2L, 'tags__name': 'metal'}, ...]
Neden?
Bu öğelerin gerçekten birden fazla etikete sahip olduğunu kontrol ettim, ancak() değerleri() yalnızca bunlardan birini değil, bunlardan birini raporlar.
Not:
Ben for song in Song.objects.filter(artist_id=5)
yineleme ve her song.tags.all()
okumaya çalıştım. Ama bu,
Ayrıca prefetch_related()
(https://docs.djangoproject.com/en/1.9/ref/models/querysets/#prefetch-related) kullanmayı denedim. Yaptığım şey, for song in Song.objects.filter(artist_id=5).prefetch_related('tags')
'u yinelemek ve her song.tags.all()
'u okumaktır, ancak aynı zamanda yavaştı. Aslında, Song.objects.filter(artist_id=5)
ve Song.objects.filter(artist_id=5).prefetch_related('tags')
yineleme arasında herhangi bir fark görmedim.
Olası yinelenen soru http://stackoverflow.com/questions/12139923/all-the-values- -çok-çok-alan-django – trinchet