Фильтр на основе того, является ли пользователь частью команды проекта
У меня есть две модели Project и User. Команда проекта - это поле "многие ко многим" с моделью User.
models.py
# Create your models here.
class Project(models.Model):
title = CharField(max_length=30)
description = TextField()
due_date = DateField()
team = ManyToManyField(settings.AUTH_USER_MODEL)
INACTIVE = 0
ACTIVE = 1
STATUS = (
(INACTIVE, ('Inactive')),
(ACTIVE, ('Active')),
)
active = models.IntegerField(default=1, choices=STATUS)
def __str__(self) -> str:
return f'{self.title}'
views.py
@login_required
def index(request):
user = request.user
tickets = Ticket.objects.filter(assigned_to=user)
ticket_count = len(tickets)
projects = Project.objects.filter(team__in = user)
project_count = len(projects)
context = {
'tickets':tickets,
'ticket_count':ticket_count,
'projects':projects,
'project_count':project_count,
}
return render(request, 'bugtracker_app/index.html', context)
Я пытаюсь использовать Query set API для возврата проектов, в которые был назначен текущий зарегистрированный пользователь. Однако я получаю следующую ошибку:
TypeError: 'User' object is not iterable
Как я могу решить эту ошибку и получить набор запросов проектов, над которыми работает пользователь?
Попробуйте изменить свойство team в модели Project на:
team = ManyToManyField(settings.AUTH_USER_MODEL, related_name= 'user_projects')
Затем в представлении вы можете использовать
user.user_projects.all()
Эта строка является вашим виновником:
projects = Project.objects.filter(team__in = user)
Поскольку это поле ManyToManyField, вам не нужно проверять __in или даже __contains. Записи, которые вы ищете, будут иметь пользователя в качестве атрибута команды.
Попробуйте это:
projects = Project.objects.filter(team = user)