Есть ли способ сделать запрос и исключить список вещей, а не вызывать исключение несколько раз?Django object multiple exclude()
ответ
Основываясь на вашем ответе на Неда, он похоже, что вы просто хотите исключить список тегов. Таким образом, вы могли бы просто использовать in
фильтр:
names_to_exclude = [o.name for o in objects_to_exclude]
Foo.objects.exclude(name__in=names_to_exclude)
ли это делать то, что вы хотите?
Что случилось с вызовом exclude несколько раз? Запросы ленивы, ничего не происходит, пока вы не попытаетесь извлечь данные из него, поэтому нет недостатка в использовании .exclude() более одного раза.
У меня есть модель, у которой есть метки manytomany field. пользователь может иметь большое количество тегов игнорирования. Я хочу динамически исключать объекты, которые пользователь не хочет видеть. Я не буду знать, сколько раз вызывать исключение до запуска. – Johnd
Не могли бы вы объяснить, что вы подразумеваете под «запросы ленивы» и «извлекать данные из него»? Thnx – akki
Что означает ленивое средство, что данные не будут извлекаться из базы данных до тех пор, пока запрос не будет использован. –
Вы можете сделать это довольно легко с Q object:
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)
Вы также должны быть в состоянии сделать это динамически исключить():
qs = Foo.objects.all()
for tag in ignored_tags:
qs = qs.exclude(tag=tag)
Чтобы улучшить ответ Daniel Роземан, я думаю, что было бы лучше, чтобы получить необходимые значения непосредственно из QuerySet вместо того, чтобы за цикл, который может быть дорогим на больших наборов данных, т.е.
names_to_exclude = objects_to_exclude.values_list('name')
Foo.objects.exclude(name__in=names_to_exclude)
Вы можете попробовать это также.
exclude_list = ['A', 'B', 'C'] qs = Foo.objects.exclude(items__in=exclude_list)
- 1. django form create or edit exclude object
- 2. django objects.filter exclude yourself
- 3. Фильтр Django vs exclude
- 4. Django queryset exclude regex
- 5. openGL load multiple object
- 6. JSON Object Multiple filter
- 7. Aws multiple object delete
- 8. Django modelforms exclude not working
- 9. django admin search_fields с exclude
- 10. Django taggit не работает exclude
- 11. Django, функция exclude() в списке
- 12. Ошибка производительности с django exclude
- 13. G ++ OpenGL load multiple object
- 14. Ajax multiple object return - Parsing
- 15. django rest framework serializer exclude field полностью
- 16. Django Multiple Choice Field/Checkbox Select Multiple
- 17. Django: exclude Список пользователей от всех Пользователей
- 18. django exclude self from queryset для проверки
- 19. Django import-export exclude not working
- 20. django-nonrel exclude listfield от admin
- 21. Как фильтровать django queryset с exclude?
- 22. Django: exclude Список пользователей от всех пользователей
- 23. Django filter/exclude дает ошибочный результат, почему?
- 24. Django Multiple Dictionary Parsing
- 25. Django Multiple Checkbox Generation
- 26. Multiple ModelForm в Django
- 27. Django multiple form factory
- 28. Django/Python "multiple repeat"
- 29. Django multiple tag field
- 30. Django multiple html paremeters
Я делаю это со списком objects_to_exclude напрямую, я не использую o.name: ignore_tags = request.user.ignore_tags.all() case_list = Case.objects.exclude (tags__in = ignore_tags)) – Johnd