【问题标题】:Filter based on whether a user is part of a project's team根据用户是否属于项目团队进行过滤
【发布时间】:2022-01-08 14:55:26
【问题描述】:

我有两个模型项目和用户。一个项目的团队是具有用户模型的多对多领域。

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)

我正在尝试使用查询集 API 返回当前登录用户已分配到的项目。但是我收到以下错误:

TypeError: 'User' object is not iterable

如何解决此错误并获取用户正在进行的项目的查询集?

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:

    这条线是你的罪魁祸首:

    projects = Project.objects.filter(team__in = user)
    

    由于它是 ManyToManyField,因此您实际上不必检查 __in 甚至 __contains。您要查找的记录会将用户作为团队属性。

    试试这个:

    projects = Project.objects.filter(team = user)
    

    【讨论】:

      【解决方案2】:

      尝试将项目模型中的团队属性更改为:

      team = ManyToManyField(settings.AUTH_USER_MODEL, related_name= 'user_projects')
      

      然后在视图中,就可以使用了

      user.user_projects.all()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多