2013-07-20 5 views
1

У меня есть модель документа, которая имеет много разных «избранных» отношений с пользователем. Когда я показываю список документов на странице поиска, я хотел бы показать, является ли каждый документ фаворитом или нет для текущего пользователя. Я знаю два способа сделать это, еще один эффективный и один уборщик. Мне интересно, есть ли другой способ сделать это, чтобы он был эффективным и чистым.Запрос на отношения M2M в шаблонах Django

  1. Чистая версия. Просто имейте метод на модели «is_favored (пользователь)», который указывает, пользуется ли данный документ данным пользователем. Затем используйте простой тег шаблона, который использует эту функцию для отображения пустой звезды или заполненной звезды. Конечно, это неэффективно, поскольку для каждого документа будет выполняться другой вызов БД. Но это хорошо, потому что представление не нужно менять каким-либо образом.

  2. Эффективная версия. Сделайте один запрос базы данных в представлении для извлечения любимых запросов и добавьте поле «благоприятствования» для каждого документа. Мне не нравится этот подход, потому что мне придется добавить пользовательский код ко всем представлениям, отображающим документы, и это не слишком СУХОЙ.

Есть ли более эффективный подход, который является одновременно сухим и эффективным? Спасибо.

ответ

1

Контекстные процессоры - это то, что вы ищете.

Здесь вы можете прочитать об этом: http://www.djangobook.com/en/2.0/chapter09.html (проверить RequestContext и контекстные процессоры раздел)


редактировать:

Вы также можете просто создать функцию, которая принимает пользователя и список документов, отображаемых в настоящее время в результатах поиска. Что-то вроде этого:

Итак, у нас есть словарь, который говорит, что если документ с данным идентификатором является фаворитом или нет. И затем вызовите эту функцию в каждом представлении и используйте ее результаты.

Это DRY сейчас (потому что если вы хотите изменить имя КЭ атрибута «избранных» Вы должны сделать только одно изменения.

+0

Я не думаю, что я могу иметь доступ к документам я проходящие в шаблон в обработчиках контекста. Мне нужно это, чтобы добавить «любимую» переменную в каждом документе. –

Смежные вопросы