Как использовать ORM Django для возврата группы строк, только когда 3 или более строк будут сгруппированы? - PullRequest
0 голосов
/ 07 ноября 2011

Учитывая следующую модель:

class Enquiry(models.Model):
    enquiryparent = models.ForeignKey('self',default=None, null=True, blank=True)
    type = models.SmallIntegerField()
    name = models.CharField(max_length=200)
    mobile = models.CharField(max_length=40,blank=True,null=True)
    email = models.EmailField(blank=True,null=True)
    message = models.TextField(blank=True,null=True)
    registered = models.DateTimeField(auto_now_add=True)

Как написать следующий запрос в Django:

Подсчитать для определенного типа, скажем, «x», где мобильный уникален в течение трех дней (используязарегистрированная дата) для полного набора ...

пример:

id, type, mobile, registered
1, 2, 988, 01/11/2011
1, 2, 988, 02/11/2011
1, 2, 988, 03/11/2011
1, 4, 988, 04/11/2011
1, 2, 988, 05/11/2011
1, 2, 988, 06/11/2011
1, 2, 988, 07/11/2011
1, 2, 555, 07/11/2011

Результат должен быть:

id, type, mobile, registered
1, 2, 988, 03/11/2011
1, 2, 988, 05/11/2011
1, 2, 555, 07/11/2011

Всего подсчета = 3.

1 Ответ

0 голосов
/ 12 ноября 2011

Если я правильно вас понимаю, кажется, что это должно быть выполнимо, но я, к сожалению, не знаком с ORM Джанго.Я думаю, что основная идея, вероятно, будет выглядеть так:

  • Выбор по id (id == 1 в вашем примере), статический целочисленный столбец, который всегда равен 1, и динамический столбец, такой как sum(static1)
  • Фильтр по type (например, type == 2 в вашем примере)
  • Сортировка по registered
  • Группировка по mobile
  • Фильтр гдеsum(static1) равно 3 или больше

Я знаю, что это возможно в необработанном SQL, но я не знаю, как это сделать в ORM Джанго.Другой вариант - просто написать цикл for, который накапливает результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...