Ich habe eine Reihe von Django-Modellen, wie im folgenden Diagramm gezeigt (die Namen der umgekehrten Beziehungen sind in den gelben Blasen dargestellt):
Django-Modelle http://mipadi.cbstaff.com/images/misc/people_django.jpg
In jeder Beziehung kann eine Person
0 oder mehr der Elemente enthalten.
Zusätzlich ist das Feld slug
(leider) nicht eindeutig; Mehrere Person
Datensätze können die gleichen Slug-Felder haben. Im Wesentlichen sind diese Datensätze Duplikate.
Ich möchte eine Liste aller Datensätze erhalten, die folgende Kriterien erfüllen: Alle doppelten Datensätze (dh mit demselben Slug) mit mindestens einem Entry
ODER mindestens einem Audio
ODER mindestens einem Episode
OR mindestens ein Article
.
Bisher habe ich folgende Abfrage:
%Vor% Dies gruppiert alle Datensätze nach slug
und fügt dann ein num_records
-Attribut hinzu, das angibt, wie viele Datensätze diesen Slug haben, aber die zusätzliche Filterung wird nicht durchgeführt (und ich weiß nicht einmal, ob das überhaupt funktionieren würde, da bei einer Menge von doppelten Datensätzen z. B. einer und Entry
und der andere Article
haben kann.
Kurz gesagt möchte ich alle doppelten Datensätze finden und sie zusammen mit den zugehörigen Modellen in einem Datensatz zusammenfassen.
Was ist der beste Weg, dies mit Django zu machen?
Ich würde dies in mehreren Abfragen tun. Die erste ist Ihre Liste von Duplikaten, die Sie haben:
%Vor%Ich würde dann diese durchlaufen, und für jeden entscheiden, was zu halten ist (eine willkürliche Entscheidung treffen - wählen Sie die erste). Aktualisieren Sie dann für alle anderen Primärschlüssel alle anderen Objekte so, dass sie auf den Primärschlüssel zeigen, den Sie ausgewählt haben:
%Vor%Haben Sie sich die Daggrego-Aggregation für "Gruppe nach" ähnlichem Verhalten angesehen?
Ich bin nicht sicher, ob die Verkettung von Filtern Sie dorthin bringt, wo Sie hin wollen, da es Personeneinträge geben wird, die zwei oder mehr Arten von Artefakten mit ihrem Namen haben. Sehen Sie sich eine vorherige StackOverflow-Frage und ihre Antwort an, die Ihnen helfen wird, vier Abfragen in einem einzelnen QuerySet wie gewünscht zu kombinieren:
So kombinieren Sie zwei oder mehr Abfragesätze in einer Django-Ansicht?
Tags und Links django django-models