Ich habe eine Abfrage setzen 'Elemente' mit Instanzen des Modells Element. Elemente haben einen Fremdschlüssel ‚Serie‘, und hat jede Serie Felder:Liste der Dicts von eindeutigen Werten über mehrere Felder in Django
subtopic_1_name
subtopic_1_slug
subtopic_2_name
subtopic_2_slug
subtopic_3_name
subtopic_3_slug
Ich brauche eine „abgeflachte“ Liste der dicts des Formulars
[{'name': 'somename', 'slug': 'someslug'}, {'name': 'anothername' 'slug': 'anotherslug'}, ... ]
wo ‚name‘ zu erzeugen und ‚Slug 'entsprechen eindeutigen Werten aus den drei Feldern name und slug, mit Ausnahme der leeren Zeichenfolge. Ich verwende derzeit eine ineffiziente for-Schleife mit "nicht in", um die Eindeutigkeit zu prüfen. Es funktioniert, ist aber zu langsam, weil 'Elemente' bis zu 1,9 Millionen Mitglieder haben können.
Was ist ein effizienter Weg, dies zu tun?
Update:
Hier ist das Beste, was ich bisher habe, aber es muss ein schnellerer Weg sein:
subtopic_list = []
ones = elements.values_list('series__subtopic1_name', 'series__subtopic1_slug').distinct()
twos = elements.values_list('series__subtopic2_name', 'series__subtopic2_slug').distinct()
threes = elements.values_list('series__subtopic3_name', 'series__subtopic3_slug').distinct()
for num in [ones, twos, threes]:
for name, slug in num:
if name != '':
subtopic_list.append({'name': name, 'slug': slug)}
Danke. Ich habe auf einen Weg gehofft, um die Notwendigkeit für die drei verschiedenen() Aufrufe zu vermeiden, aber das ist sauberer Code. – thebenedict
Warum möchten Sie die verschiedenen() Aufrufe loswerden? Es ist möglich, aber in Ihrer Frage erwähnten Sie, dass Sie die teure For-Schleife eliminieren wollten. – Tommy