Используйте for_each
:
// for_each example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void myfunction (int i) {
cout << " " << i;
}
struct myclass {
void operator() (int i) {cout << " " << i;}
} myobject;
int main () {
vector<int> myvector;
myvector.push_back(10);
myvector.push_back(20);
myvector.push_back(30);
cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myfunction);
// or:
cout << "\nmyvector contains:";
for_each (myvector.begin(), myvector.end(), myobject);
cout << endl;
return 0;
}
Судя по вашему ответу Неду, похоже, что вы просто хотите исключить список тегов. Так что вы можете просто использовать фильтр в
:
names_to_exclude = [o.name for o in objects_to_exclude]
Foo.objects.exclude(name__in=names_to_exclude)
Это то, что вы хотите?
Что плохого в многократном вызове exclude? Запросы являются ленивыми, ничего не происходит, пока вы не попытаетесь извлечь из него данные, поэтому нет недостатка в использовании .exclude () более одного раза.
Вы можете довольно легко сделать это с помощью объекта Q :
from django.db.models import Q
excludes = None
for tag in ignored_tags:
q = Q(tag=tag)
excludes = (excludes and (excludes | q)) or q # makes sure excludes is set properly
set_minus_excluded = Foo.objects.exclude(excludes)
Вы также должны иметь возможность делать это динамически с помощью exclude ():
qs = Foo.objects.all()
for tag in ignored_tags:
qs = qs.exclude(tag=tag)