2017-07-18 3 views
0

ich ein ModellWie Zeilen mit doppelten Spalten in django

class Foo(models.Model): 
    first = models.CharField() 
    second = models.CharField() 

Daten ich habe, ist

first second 
1  2 
1  2 
1  2 
3  4 

Jetzt müssen lösche ich alle doppelten Zeilen löschen möchten, und einen Eintrag zu halten. Das Endergebnis

first second 
1  2 
3  4 

Wie mache ich das? Ich habe diese Frage überprüft, konnte es aber nicht richtig herausfinden. Annotate

Ich habe

versucht
foo_ids = Foo.objects.annotate(first_c=Count('first'), second_c=Count('second')).filter(first_c__gt=1, second_c__gt=1).values('first', 'second', 'id') 

Dann versuchen, herauszufinden, wie man es nicht eine der Duplikate jeder I Liste zu löschen.

+1

Hier ist ein toller Beitrag zur Beantwortung Ihrer Frage. https://stackoverflow.com/a/5879542/8326247 –

Antwort

0

ich dies am Ende tun.

from django.db.models import Count 
duplicate_foo = Foo.objects.values('req_group','child_program__id').annotate(id_c=Count('id')).filter(id_c__gt=1) 
for dups in duplicate_foo: 
    for i, val in enumerate(Foo.objects.filter(first=dups['first'],              
               second=dups['second'])): 
     if i ==0: 
      continue 
     val.delete() 

Nicht die optimalste Lösung. Aber es funktioniert.

1
for row in Foo.objects.all(): 
    if Foo.objects.filter(first=row.first,second=row.second).count() > 1: 
     row.delete() 

können Sie versuchen, diese

Verwandte Themen