2015-12-21 2 views
0

У меня есть список Django Модель объектов, которые я получил от множества запросов, но есть повторяющиеся объекты в этом списке может один один скажите мне, как удалить этиудаление дубликатов из списка моделей Джанго

Я пытался это, но это дает мне пустой список, не работал

print(somemodels) #union of some quersets as list 
>>> [<SomeModel: 1>, <SomeModel: 1>, <SomeModel: 2>] 
cleaned_up_list = [] 

for somemodel in somemodels: 
    print (type(some model)) 
    >>>> <class 'SomeModel.models.SomeModel'> 
    if somemodel not in somemodels: 
     print ("SomeModel is not already in :" cleaned_up_list) 
     cleaned_up_list.append(somemodel) 

print ("Very Final Results :", cleaned_up_list) 

очищенный список по-прежнему пуст? так что это не сработало, так как вы можете иметь такие же две модели в some models с такими же pk из 1. Я хочу удалить эти дубликаты. Можно ли мне помочь удалить дублирующие модели django из списка моделей django?

+0

Используйте .distinct() https://docs.djangoproject.com/en/1.9/ref/models/querysets/#distinct? – Maciek

+0

работает с 'списками' тоже? –

+0

как могло что-то из списка не быть в этом списке? –

ответ

1

Заменить этот код:

if somemodel not in somemodels: 
    print ("SomeModel is not already in :" cleaned_up_list) 
    cleaned_up_list.append(somemodel) 

По:

if somemodel not in cleaned_up_list: 
    print ("SomeModel is not already in :" cleaned_up_list) 
    cleaned_up_list.append(somemodel) 

Потому что в первом коде тест всегда будет верно, так как вы проверяете, если элемент существует в списке, который перебирает на.

+0

Да, это была моя ошибка благодаря помощи –

1

Я заметил, что ваш комментарий объединения несколько запросов в качестве списка, поэтому я предполагаю, что они имеют одинаковые объекты модели. Вы можете объединить запросы, выполнив следующие действия:

queryset = queryset1 | queryset2 | queryset3 

Результат - это не список, а запрос. Тогда вы можете просто сделать:

queryset = queryset.distinct() 
Смежные вопросы