Ответы пользователя по тегу Django
  • Почему nginx отдаёт 414 Request-URI Too Large?

    @jsse
    400 Bad Request — сервер обнаружил в запросе клиента синтаксическую ошибку. Появился в HTTP/1.0

    как писал выше Radren лучше переделать в post
    Ответ написан
    Комментировать
  • Как лучше реализовать историю действий?

    @jsse
    самый простой вариант использовать дерево, где каждый конечный узел и будет последним действием.
    таким образом можно в любой момент забрать историю(ancestors) или построить всю картину в виде дерева.

    я бы рекомендовал mptt для django, но можно найти и более простые решения
    Ответ написан
  • Как исправить ошибку при добавлении записи после импорта в БД?

    @jsse
    Проблема с sequence, копай в эту сторону
    Ответ написан
    Комментировать
  • Как сделать group_by по определённому полю в Django 1.8?

    @jsse
    Сейчас если есть агрегация добавляются в group_by все поля из select, хотя в коде описано что этот хак совместим, но неет.

    Прийдется перекрывать стандартную функцию группировки:

    _get_group_by = SQLCompiler.get_group_by
    def custom_group_by(self, select, order_by):
        if self.query.group_by is True or not self.query.group_by:
            return _get_group_by(self, select, order_by)
        expressions = []
        if self.query.group_by is not True:
            for expr in self.query.group_by:
                if not hasattr(expr, 'as_sql'):
                    expressions.append(self.query.resolve_ref(expr))
                else:
                    expressions.append(expr)
        if len(expressions):
            having = self.query.having.get_group_by_cols()
            for expr in having:
                expressions.append(expr)
            result = []
            seen = set()
            expressions = self.collapse_group_by(expressions, having)
            for expr in expressions:
                sql, params = self.compile(expr)
                if (sql, tuple(params)) not in seen:
                    result.append((sql, params))
                    seen.add((sql, tuple(params)))
            if result:
                return seen
    SQLCompiler.get_group_by = custom_group_by
    
    # Потом использовать как обычно:
    post_set = Active.objects.filter(rubrica__pk=1, type__pk=1).order_by('user', '-pub_date')
    post_set.query.group_by = ['user_id']
    print post_set.query


    Как вариант расширить вложенным запросом, но это может сказаться на производительности.
    что-то подобное:
    users = Active.objects.values('user_id').distinct()
    post_set = Active.objects.filter(rubrica__pk=1, type__pk=1, user__in=users)


    будет один запрос, но появится вложенный select
    Ответ написан