2011-12-31 58 views
0

如果我有以下型號:Django的:列表與非唯一場均obejcts

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 

我怎麼列出具有非唯一的姓氏字段中的所有對象?例如,如果有20個對象都具有姓氏'Smith',則它們將被列出。但是,如果只有一個對象具有姓氏'歐拉',它將不會包含在列表中。

+0

我想,這是不是任務Django的ORM。嘗試原始的SQL和檢查這個問題:http://stackoverflow.com/questions/688549/finding-duplicate-values-in-mysql – 2011-12-31 10:27:09

回答

3

這裏是與2個查詢的一種方式:

non_unique_last_names = (Person.objects 
    .values_list('last_name', flat=True) 
    .annotate(last_name_count=Count('last_name')) 
    .filter(last_name_count__gt=1)) 

non_unique_person_objects = Person.objects.filter(last_name__in=non_unique_last_names) 
+0

Count類從哪裏來? – Rob 2015-04-07 18:51:04

+0

@Jura'from django.db.models import Count' – 2015-04-07 19:37:53