У Mercurial документация все-же лучше, чем у Git. И опыт многих людей показывает, что миграция на Mercurial для пользователей SVN проще, да и сама система значительно дружелюбнее и удобнее в настройке, чем Git. Так же относительно несложен перенос проектов из SVN в Mercurial (с этим в Git раньше были проблемы, возможно сейчас что-то изменилось). А скорость Mercurial вполне достаточная, и задачи свои он решает не менее эффективно, чем Git.
Критерий истины — практика. Практика показывает более низкий уровень грамотности людей, пользующихся серверными сборками. Это факт. Впрочем, продукт зенда вполне качественный, тут спору нет, и может служить даже как инструмент быстрого развертывания, например для интранет-сервера.
Как досадно, что люди, приходящие в web через php, поколение за поколением не знают не только, что «под капотом», но и вообще элементарных вещей — что такое заголовок запроса, как взаимодействуют приложение и web-сервер… И во многом этому способствуют наборы «все-в-одном». Когда-то — Денвер со товарищи, теперь — это…
Тогда непонятен смысл добавления mymanager в класс Article. Достаточно создать свой менеджер, в нем метод select_score и перегрузить Article.objects своим менеджером. Дальше вызывать Article.objects.select_score(). Это сделает код более консистентным и понятным на мой взгляд.
> Единственная проблема, select_score нужно вызывать непосредственно у менеджера. У QuerySet
> такого свойства нет. (готов выслушать предложения на этот счёт)
>
предложение:
class ScoreOrderManager(models.Manager):
def get_query_set(self):
""" Выбрать результаты голосования по объекту """
from django.contrib.contenttypes.models import ContentType
return super(ScoreOrderManager, self).get_query_set().extra(select={'score': 'SELECT SUM(vote) FROM votes WHERE content_type_id=%i AND object_id=%s.id' % (int(model_type.id), table_name)})
> такого свойства нет. (готов выслушать предложения на этот счёт)
>
предложение:
class ScoreOrderManager(models.Manager):
def get_query_set(self):
""" Выбрать результаты голосования по объекту """
from django.contrib.contenttypes.models import ContentType
model_type = ContentType.objects.get_for_model(self.model)
table_name = self.model._meta.db_table
return super(ScoreOrderManager, self).get_query_set().extra(select={'score': 'SELECT SUM(vote) FROM votes WHERE content_type_id=%i AND object_id=%s.id' % (int(model_type.id), table_name)})
.... определяем менеджер...
Теперь:
Article.mymanager.order_by('-score')