Определение, связан ли пользователь с объектом через другой класс в шаблоне django - PullRequest
2 голосов
/ 12 января 2010

У меня есть модель пользователь , модель предмет и модель владение для хранения данных о пользователе, обладающем предметом. Когда пользователь входит в систему и просматривает элемент, я хочу отобразить кнопку «Добавить в мои элементы», если только у пользователя нет элемента.

Я пробовал этот код в шаблоне:

{% if not user.possession_set.filter(item=item.id) %}    
<input type='submit' value='add to my items' />
{% endif %}

, где item - имя внешнего ключа для объекта item в моей модели владения и item.id - это первичный ключ для элемента, отображаемого пользователю

но я получаю эту ошибку:

Could not parse the remainder: '(item=item.id)'

Я думаю, что не могу использовать функцию .filter (), так как она предназначена для запросов к базе данных? Я нашел шаблоны шаблонов Django, как этот: http://docs.djangoproject.com/en/1.1/ref/templates/builtins/#get-digit но нет ничего, что можно объединить, чтобы отфильтровать определенное значение элемента. Кажется, у меня есть вся информация в шаблоне, чтобы сделать это, так как я получаю пользователя и его владение_set, в котором должно быть поле item для каждого владения, так что я думаю, что это просто синтаксическая вещь?

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 12 января 2010

Вы можете написать собственный шаблонный фильтр для этого.

def owns(user, id):
    return not user.possession_set.filter(item=id)

Тогда в вашем шаблоне:

{% load mystuff %}
{% if user|owns:item.id %}

Проверьте документы Django на http://docs.djangoproject.com/en/1.1/howto/custom-template-tags/ для получения дополнительной информации. Не уверен, будет ли работать item.id в качестве аргумента фильтра.

1 голос
/ 12 января 2010

Вы не можете использовать такие сложные выражения в шаблоне, только в представлении. Вычислите информацию о том, может ли пользователь иметь эту кнопку в представлении и передать в шаблон одно значение True или False Например:

в поле зрения

allow_addition = not user.possession_set.filter(item=item.id)

и в шаблоне:

{% if allow_addition %}
  <input type='submit' value='add to my items' />
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...