django - django - 如何获取团队的所有项目?
问题描述
我是 Django 新手,有一个我自己无法解决的问题。对我来说这是一个很大的问题。
我想显示与特定团队相关的项目列表并将其显示在 ListView 中。
我假设它应该检查当前用户属于哪个团队,然后根据团队,它应该列出项目。
我的项目中有两个应用程序:1)用户和 2)项目
用户模型:
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.contrib.auth import get_user_model
from django.urls import reverse
class CustomUser(AbstractUser):
bio= models.CharField(max_length=300, null= True, blank=True)
class Team (models.Model):
title = models.CharField(max_length=200)
user= models.ManyToManyField(get_user_model())
date_created= models.DateTimeField(auto_now_add=True, blank=True, null=True)
date_updated= models.DateTimeField(auto_now=True,blank=True, null=True )
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('team_detail', args=[str(self.pk)])
项目模型是
class Project (models.Model):
team= models.ForeignKey(Team,on_delete=models.CASCADE )
title = models.CharField(max_length=150, null=False, blank=False)
notes = models.TextField( null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True, blank=True, null=True)
date_updated = models.DateTimeField(auto_now=True, blank=True, null=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('project_detail', args=[str(self.pk)])
在 projects.views 中:我编写了以下代码,但无法计算出两个模型之间的查询集。
class ProjectPageView(ListView):
model = Project
def get_queryset(self):
queryset = super(ProjectPageView, self).get_queryset()
queryset = queryset.filter( XXXXXXXXXXXXXXX )
return queryset
context_object_name = 'projects_list'
template_name = 'projects/projects.html'
并在 HTML
{% extends '_base.html' %}
{% block title %}Projects{% endblock title %}
{% block content %}
<h1> Project list for this Team : </h1>
{% for project in project_list %}
<div>
<h5><a href="{{ project.get_absolute_url }}">{{ project.title }}</a></h5>
</div>
{% endfor %}
{% endblock content %}
真的非常感谢您的帮助。
解决方案
您可以从请求对象中获取当前用户,然后继续
class ProjectPageView(ListView):
model = Project
def get_queryset(self):
queryset = super(ProjectPageView, self).get_queryset()
user_team = Team.objects.filter(user=self.request.user).first()
queryset = queryset.filter(team=user_team)
return queryset
context_object_name = 'projects_list'
template_name = 'projects/projects.html'
推荐阅读
- batch-file - 尝试 ping 谷歌,如果没有响应禁用/启用界面
- php - 以角度获取页面重新加载后之前的全局状态数据
- amazon-elastic-beanstalk - Elastic Beanstalk 不会自动从 ECR 更新映像
- json - 如果函数中的值发生变化,则添加到新数组中
- wordpress - 是否有任何 wordpress 插件可以使网站像亚马逊一样接收基于 OTP 的交货确认?
- netty - 一个简单的 Netty + p2p + 聊天的例子
- c# - 窗口样式在设计器中不可见
- go - 如何在 go dep 项目中使用 go 模块作为依赖项?
- python-3.x - 如何在python中预测日期和日期?
- azure - 通过 keyvault 注入连接字符串时备份 Azure WebApp