Как использовать менеджеры пользовательских моделей Django

Как вы определяете, должно ли что-то быть отдельным пользовательским менеджером моделей или функцией существующего менеджера моделей?

Например, я мог бы создать одного менеджера моделей, чей набор запросов — это все экземпляры модели. Затем я мог бы создать функции в этом менеджере, чтобы возвращать подмножества, такие как - только экземпляры, указанные как частные или общедоступные.

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

eg:

Video.objects.get_private()
Video.objects.get_public()

or

Video.private.all()
Video.public.all()

person 9-bits    schedule 03.02.2012    source источник


Ответы (1)


Из дзен Python:

>>> import this
The Zen of Python, by Tim Peters

...    
Explicit is better than implicit.
...
>>> 

Может быть, ваша ситуация сложнее, чем я понял из вашего примера кода, но ИМХО вы должны просто использовать фильтр:

Video.objects.filter(private=False)

Если вы пытаетесь сэкономить штрихи для обычных фильтров, помните, что наборы запросов ленивы, поэтому вы можете их сохранить:

private_videos = Video.objects.filter(private=False)
...
private_videos.objects.filter(director='Frederico Felini').order_by('-year')

Первое назначение не инициирует связь с базой данных. Запасные пользовательские менеджеры для более сложных вещей.

Я видел этот шаблон множества методов модели и/или пользовательских менеджеров, потому что система шаблонов Django sux^H^H^His намеренно ограничена (вы не можете вызывать методы с аргументами без создания шаблонных фильтров). Если это так, переключите слой шаблона на Jinja2.

person Paulo Scardine    schedule 03.02.2012