2015-10-21 48 views
0

在我的模型有類似下面的類:獲取非重複實例列表的數據庫方法?

class Contact(models.Model): 
    group = models.CharField(max_length=200, blank=True) 
    name = models.CharField(max_length=100) 

我想找到讓所有的組的列表的更好的方法。到目前爲止 我有兩個解決方案:

groups=[] 
for contact in Contact.objects.all(): 
    if not contact.group in groups: 
     groups.append(contact.group) 

,第二個:

groups=set(contact.group for contact in Contact.objects.all()) 

我認爲,第二個是要好得多,因爲它使用的發電機,但我想知道是否有是一些數據庫方法,如filter, exclude , etc,可以讓我這樣做。

這樣做的目的是優化用戶有很多聯繫但只有幾個組的情況。 (在這種情況下,可能使一類group會更好,但我真的想避免)

回答

0

最好的辦法是使用distinct

groups = Contact.objects.values_list('group', flat=True).distinct() 
+0

是不壞,但它返回一個字典列表,類似於[{'group':'A'},{'group':'B'},{'group':'C'}],所以我需要額外的步驟來獲取聯繫人列表。我不知道我提出的解決方案2是不是更好 – rsm

+0

我更改代碼,現在它返回值列表 –

+0

是的,謝謝!這就是我正在尋找的 – rsm

相關問題