Pull to refresh

Comments 14

Появилась возможность вызовов QuerySet-ов напрямую из менеджера:

Давно пора. Клепать по менеджеру на каждый чих совсем не дело, особенно, когда это просится сделать через classmethod. Пытался пользоваться 1.7 — не договорился с миграцией, репорты висят, еще не фиксили на тот момент. И новый префетч клевый, да.
На тему QuerySet'ов, когда я ковырял исходники трансифекса, нашел там занятную штуку:
class ChainerManager(models.Manager):
    """
    Reference: http://djangosnippets.org/snippets/562/
    """
    def __init__(self, qs_class=models.query.QuerySet):
        super(ChainerManager, self).__init__()
        self.queryset_class = qs_class

    def get_query_set(self):
        return self.queryset_class(self.model)

    def __getattr__(self, attr, *args):
        try:
            return getattr(self.__class__, attr, *args)
        except AttributeError:
            return getattr(self.get_query_set(), attr, *args)


Что позволяло делать:

NewsQuerySet(models.query.QuerySet):
    def live(self):
        return self.filter(state='published')

    def interesting(self):
        return self.filter(interesting=True)

NewsItem(models.Model):
    objects = ChainerManager(NewsQuerySet)

ChainerManager(NewsQuerySet).live().interesting()
[<NewsItem: ...>]
# ну или так:
NewsItem.objects.filter().live().interesting()
Моя ленивый, моя лень забивать objects, да еще добавлять filter().live():

class Boobs(models.Model):
    …
    @classproperty
    def medium(cls):
        return cls._default_manager.filter(…)

Boobs.medium.latest()
> Курсор баз данных, теперь может использоваться в качестве контекст менеджера:
А в коде, который написан под этим утверждением, context manager даже и не пахнет.
Спасибо. Дописал недостающую часть.
Требуют использования барин/холоп.
Новая мидлварь django.contrib.sites.middleware.CurrentSiteMiddleware позволяет установливать текущий сайт при каждом запросе.

А обещали, что sites сдохнет…

Новый подкласс HttpResponse — JsonResponse.

Наконец-то.
Ребят, а есть ли хорошая/улучшенная поддержка нереляционных БД, вроде MongoDB? Чтобы админка работала сразу и без дополнительных установок плагинов
Пример с кверисетами странный — я обычно то же самое дело в кастомном менеджере, унаследованном от штатного.
Печально, что сам South конфликтует с 1.7
Sign up to leave a comment.

Articles