Как использовать Django Custom Model Manager - PullRequest
1 голос
/ 03 февраля 2012

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

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

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

Например:

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

или

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

1 Ответ

1 голос
/ 03 февраля 2012

Из дзен 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 ^ Его преднамеренно ограничен (вы не можете вызывать методыс аргументами без создания шаблонных фильтров).Если это так, переключите слой шаблона на Jinja2.

...