Python Django中的多对多查询

Python Django中的多对多查询,python,django,many-to-many,manytomanyfield,Python,Django,Many To Many,Manytomanyfield,我有一个多对多字段,如下面的模型: class Project(models.Model): name = models.CharField(verbose_name="Project Name", max_length=1000, blank = True, null = True) number = models.IntegerField(verbose_name = "Project Number", blank =False ,null=False) class Employee(

我有一个多对多字段,如下面的模型:

class Project(models.Model):
 name = models.CharField(verbose_name="Project Name", max_length=1000, blank = True, null = True)
 number = models.IntegerField(verbose_name = "Project Number", blank =False ,null=False)

class Employee(models.Model):
     name = models.CharField(verbose_name="Full Name", max_length=1000, blank = True, null = True)
     number = models.IntegerField(verbose_name = "Number", blank = True ,null = True)
     salary = models.IntegerField(verbose_name = "Salary", blank =True ,null=True)
     departmentnum = models.IntegerField(verbose_name = "Department Number", blank = False ,null = False)
     projects = models.ManyToManyField('Project')
我正在尝试获取每个员工所从事的所有项目,并且一直在思考如何在我的视图中对其进行编码。我所尝试的:

def employees(request):
    if request.user.is_authenticated():
        username = str(request.user.username)

    employeeslist = Employee.objects.all().order_by('number')
    projects = Employee.projects.all()

这显然是行不通的。任何帮助都将是惊人的

如果您想获得多对多值,您可以编写
employeeslist.projects\u set.all()

只需按
employee
反向关系过滤即可。不要忘记
distinct()
查询集:

projects = Project.objects.distinct().filter(employee__in=employeeslist)
如果您希望每个员工输出项目,则无需将
项目
查询集传递到模板:

{% for employee in employee_list %}
    <h1>{{ employee.name }}</h1>
    <ul>
    {% for project in employee.projects.all %}
        <li>{{ project.name }}</li>
    {% endfor %}
    </ul>
{% endfor %}
{员工列表%中的员工百分比}
{{employee.name}
    {employee.projects.all%中的项目为%s}
  • {{project.name}
  • {%endfor%}
{%endfor%}
仅对于记录、字符串或多个声明的实际对象并不重要,有时首选的选项是使用字符串来绕过循环导入。