Объект Django несколько исключают ()

Используйте 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;
}
21
задан Neil Hickman 25 September 2013 в 22:03
поделиться

3 ответа

Судя по вашему ответу Неду, похоже, что вы просто хотите исключить список тегов. Так что вы можете просто использовать фильтр в :

names_to_exclude = [o.name for o in objects_to_exclude] 
Foo.objects.exclude(name__in=names_to_exclude)

Это то, что вы хотите?

40
ответ дан 29 November 2019 в 20:03
поделиться

Что плохого в многократном вызове exclude? Запросы являются ленивыми, ничего не происходит, пока вы не попытаетесь извлечь из него данные, поэтому нет недостатка в использовании .exclude () более одного раза.

4
ответ дан 29 November 2019 в 20:03
поделиться

Вы можете довольно легко сделать это с помощью объекта 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)
4
ответ дан 29 November 2019 в 20:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: