У меня проблемы с запросом - с filter () все в порядке, но с exclude () не работает. Мои модели:
class Dictionary(DateTimeModel):
base_word = models.ForeignKey(BaseDictionary, related_name=_('dict_words'))
word = models.CharField(max_length=64)
version = models.ForeignKey(Version)
class FrequencyData(DateTimeModel):
word = models.ForeignKey(Dictionary, related_name=_('frequency_data'))
count = models.BigIntegerField(null=True, blank=True)
source = models.ForeignKey(Source, related_name=_('frequency_data'), null=True, blank=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name=_('frequency_data'))
user_ip_address = models.GenericIPAddressField(null=True, blank=True)
date_of_checking = models.DateTimeField(null=True, blank=True)
is_checked = models.BooleanField(default=False)
И я хочу взять несколько слов из словаря, где частоты не от какого-то пользователя
Dictionary.objects.prefetch_related('frequency_data').filter(frequency_data__user=1)[:100] - OK
Dictionary.objects.prefetch_related('frequency_data').exclude(frequency_data__user=1)[:100] - processor up to 100% and loading
Без prefetch_related то же самое. Что не так с exclude?
РЕДАКТИРОВАТЬ Таблица БД словаря - 120 тыс. строк; FrequencyData - 160 тыс. строк.
РЕДАКТИРОВАТЬ2 psql (9.6.6)
Dictionary.objects.prefetch_related('frequency_data').exclude(frequency_data__user=1).count()
- person Brown Bear   schedule 30.05.2018qs=Dictionary.objects.prefetch_related('frequency_data').exclude(frequency_data__user=1).count(); print(qs.query)
, а затем в./manage.py dbshell
попробуйте выполнить результат печати. - person Brown Bear   schedule 30.05.2018AttributeError: 'int' object has no attribute 'query'
Затем я пробую локально:from django.db import connection qs=Dictionary.objects.prefetch_related('frequency_data').exclude(frequency_data__user=1).count() print(connection.queries)
и мой результат: pastebin.com/ZMG0StN1 - person Mike Br   schedule 30.05.2018'time': '0.039'
да? - person Brown Bear   schedule 30.05.2018sql
внутриplsql
- person Brown Bear   schedule 30.05.2018count
работает 15 мин? если да, сделайтеEXPLAIN ANALYZE
в psql для выбора и создайте новый вопрос с тегом postgres. - person Brown Bear   schedule 30.05.2018