У меня были отношения «многие ко многим» между двумя моделями Django:
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
...
bees = models.ManyToManyField('Bee')
class Bee(models.Model):
...
в моем шаблоне, я хочу получить различный вывод в зависимости от того, есть ли у пользователя определенные пчелы.Сейчас я создаю собственный фильтр, который делает что-то похожее на это:
@register.filter
def my_filter(user, bee):
userprofile = user.get_profile()
return bee in userprofile.bees.all()
, и в шаблоне я могу использовать его так:
{% for bee in bees %}
{% if user|my_filter:bee %}
I am in {{ bee }}
{% else %}
I am not in {{ bee }}
{% endif %}
{% endfor %}
, ноэто кажется хакерским, так как 1) я позвонил .all () - загрузил всех пчел, включая пчел, которые мне не интересны - без использования результатов, 2) я не думаю, что мне нужно создавать пользовательский фильтрпоскольку это должно быть довольно распространенным явлением
Как правильно проверить, принадлежит ли Модель отношениям «многие ко многим» с другой Моделью?