Счетчик аннотаций Python с фильтром datetime - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть модель Token:

class Token(models.Model):
  name = models.CharField()
  ...

У меня есть модель Phrase с токеном от fk

class Phrase(models.Model):
  token = models.ForeignKey(Token, on_delete=models.SET_NULL, null=True,
    related_name = "phrases")
  frequency = models.IntegerField() 

Мне нужно выполнить сложный запрос. В результате я хочу получить списокобъектов с именами и фразами токенов, отфильтрованных по некоторому количеству параметров, например:

[{'name':'token1', 'phrases_with_freq_greater_than_100': 50},{'name':'token2', 'phrases_with_freq_greater_than_100': 250}]

Как мне это сделать?Я знаю, что могу сделать это с помощью функции аннотирования, но не знаю, как это сделать.Пока я делаю это, просто перебирая объекты токена, но это не эффективно.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Да, вы можете запросить модель токена с помощью функции аннотирования, чтобы вы могли создать столбец с обязательным значением 'phrases_with_freq_greater_than_100'.Следующий запрос вернет вам объект запроса с указанным выше столбцом (переменной):

tokens = tokens.annotate(phrases_with_freq_greater_than_100=Count(phrases__frequency__gt=100))

Теперь вы можете либо выполнить итерацию объекта запроса 'tokens', либо получить прямой список словарей, используя функцию значений в запросе выше, например:

tokens.annotate(phrases_with_freq_greater_than_100=Count(phrases__frequency__gt=100)).values('name','phrases_with_freq_greater_than_100')
0 голосов
/ 20 сентября 2018
tokens.annotate(phrases_with_freq_greater_than_100=Count(Q(phrases__freq__gte=100))).values('name','phrases_with_freq_greater_than_100')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...