#django #django-models #django-queryset
#джанго #джанго-модели #django-набор запросов
Вопрос:
У меня есть две модели Проекта и пользователя. Команда проекта-это поле «многие ко многим» с пользовательской моделью.
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) -gt; 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)
Я пытаюсь использовать API набора запросов для возврата проектов, которым был назначен текущий вошедший в систему пользователь. Однако я получаю следующую ошибку:
TypeError: 'User' object is not iterable
Как я могу устранить эту ошибку и получить набор запросов к проектам, над которыми работает пользователь?
Ответ №1:
Эта строка-ваш виновник:
projects = Project.objects.filter(team__in = user)
Поскольку это поле ManyToManyField, вам на самом деле не нужно регистрировать __или даже __содержит. Записи, которые вы ищете, будут иметь пользователя в качестве атрибута команды.
Попробуйте это:
projects = Project.objects.filter(team = user)
Ответ №2:
Попробуйте изменить свойство команды в модели проекта, чтобы оно было:
team = ManyToManyField(settings.AUTH_USER_MODEL, related_name= 'user_projects')
Затем в представлении вы можете использовать
user.user_projects.all()