Фильтр на основе того, является ли пользователь частью команды проекта

У меня есть две модели 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)
Вернуться на верх