2013-02-26 271 views
1

對不起,如果這是一個基本問題,但我似乎無法解決這個問題! :/從Django列表中刪除重複項

我的應用程序填充文件夾中的文件列表。然後查詢一個數據庫並創建一個文件名的查詢集。

我想列表被合併,然後重複刪除。然而在

def Image_Add(request): 
    path="..." 
    images =os.listdir(path) 
    usedimage=Images.objects.values('imageurl').distinct() 
    result=[] 

    for image in images: 
     result.append(image) 

    for image2 in usedimage: 
     result.append(image2) 

    imagelis=set(result) 
    imagelist=list(imagelis) 

    return TemplateResponse(request, 'Image_Add.html', {'form':imagelist}) 

:最後的名單將在隨後的模板羅列出來,將這個包含在該文件夾中,但還沒有被添加到數據庫文件,

Views.py模板中的所有文件都將顯示,而不會刪除重複項。 (我目前就行了 「imagelis=set(result)」 得到一個錯誤)

感謝您

+0

你爲什麼要轉換成一個集合,然後回到列表?另外,你得到的錯誤是什麼? – 2013-02-26 11:59:50

回答

6

使用

usedimage=Images.objects.values_list('imageurl', flat=True).distinct() 

,而不是

usedimage=Images.objects.values('imageurl').distinct() 

docs

values()返回不可分類的字典。這會導致錯誤。

+0

啊......那是完美的。謝謝 – user1662290 2013-02-26 12:02:47

2
usedimage=Images.objects.values_list('imageurl', flat=True).distinct() 

for image in usedimage: 
    Images.objects.filter(pk__in=Images.objects.filter(imageurl=imageurl 
     ).values_list('id', flat=True)[1:]).delete() 
0

正如凱瑟琳說,你可以在django quesy本身過濾。

或者刪除重複項,請嘗試設置 以下是一個示例。

import sets 
t = sets.Set(['a', 'b', 'c', 'd']) 
t1 = sets.Set(['a', 'b', 'c']) 

print t | t1 
print t - t1