1

对不起,如果这是一个基本问题,但我似乎无法解决这个问题!:/

我的应用程序填充文件夹中的文件列表。然后它查询数据库并创建文件名的查询集。

我希望合并列表,然后删除重复项。最终列表将在模板上列出,其中包含文件夹中但尚未添加到数据库中的文件,

视图.py:

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})

但是,在模板上显示的所有文件都没有删除重复项。(我目前在“ imagelis=set(result)”行出现错误)

感谢您

4

3 回答 3

6

采用

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

代替

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

请参阅文档

values()返回不可散列类型的 dicts。这会导致错误。

于 2013-02-26T11:53:52.137 回答
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()
于 2013-02-26T11:58:47.687 回答
0

正如凯瑟琳所说,您可以过滤 django quesy 本身。

或者,要删除重复项,您可以尝试设置这是一个示例。

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

print t | t1
print t - t1
于 2013-02-26T11:59:09.397 回答