Django: проверьте значение в поле ManyToMany в шаблоне - PullRequest
5 голосов
/ 09 декабря 2011

В моем приложении Django есть следующая модель:

class Group(models.model):
    name=models.CharField(max_length=30)
    users=Models.ManyToManyField(User)

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

Что такоенаиболее эффективный способ определить, входит ли текущий вошедший в систему пользователь в каждой группе?Я бы предпочел не запрашивать БД для каждой отображаемой группы, что, вероятно, произойдет, если я просто сделаю следующее.

{% if user in group.users.all %}

Спасибо.

1 Ответ

7 голосов
/ 09 декабря 2011

По вашему мнению, создайте set идентификаторов групп, частью которых является этот пользователь.

user_group_set = set(current_user.group_set.values_list('id',flat=true))

. Затем передайте его в контекст шаблона:

return render_to_response('template.html',{'user_group_set':user_group_set})

В вашем шаблоне для каждой группы используйте:*

{% if group.id in user_group_set %}
...