Python 如何使用下表中的字段从表中搜索数据

Python 如何使用下表中的字段从表中搜索数据,python,django,django-views,django-templates,Python,Django,Django Views,Django Templates,所以,也许我的问题不够清楚。。。我将尝试在示例中演示它 我有三张桌子: models.py class Department(models.Model): department = models.CharField(max_length=100) activate = models.BooleanField(default=True) def __str__(self): return self.department class Employee(m

所以,也许我的问题不够清楚。。。我将尝试在示例中演示它

我有三张桌子: models.py

class Department(models.Model):
    department = models.CharField(max_length=100)
    activate = models.BooleanField(default=True)

    def __str__(self):
        return self.department


class Employee(models.Model):
    noEmployee = models.DecimalField(max_digits=8, decimal_places=0, default=10) #
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=100)
    department = models.ForeignKey(Department, on_delete=models.CASCADE, default=1)
    activate = models.BooleanField(default=True)

    def __str__(self):
        return str(self.noEmployee)


class List_of_tasks(models.Model):
    myData = datetime.now()
    formatedDate = myData.strftime("%Y-%m-%d")

    task = models.CharField(max_length=250)
    description = models.TextField(blank=True, null=True)
    responsible = models.ForeignKey(Employee, on_delete=models.CASCADE, default=1)
    start_date = models.DateField('Start date', default=formatedDate)
    finish_date = models.DateField('Finish date', default=formatedDate)
    finished = models.BooleanField(default=False)

    def __str__(self):
        return self.task
以及views.py中的一个小函数

def filter(request):
    qs = List_of_tasks.objects.all()
    task_query = request.GET.get('task_contains')
    department_query = request.GET.get('department_contains')

    print(task_query)
    if department_query is not None:
        dep = Employee.objects.filter(department__department__icontains=department_query)

        for d in dep:
            print('department: ', d.noEmployee, d.name, d.surname)

        for d in dep:
            dep2 = List_of_tasks.objects.filter(responsible__noEmployee__exact=d.noEmployee)
            for d2 in dep2:
                print('Tasks: ', d2.task, d2.responsible)

    if is_valid_queryparam(task_query):
        qs = qs.filter(task__icontains=task_query)

    context = {'queryset': qs,}

    return render(request, 'appl01/export.html', context)
在表任务列表中查找任务或负责人很容易,但我想查找 例如,分配给部门的所有任务。。。下两张桌子

正如你所看到的,我创建了自己的方法,它可以按照我的要求工作,但效率不高。如果表Employee或任务列表中有大量记录,则此搜索非常缓慢

...
for d in dep:
    dep2 = List_of_tasks.objects.filter(responsible__noEmployee__exact=d.noEmployee)
    for d2 in dep2:
        print('Tasks: ', d2.task, d2.responsible)
...
问题是:
我怎样才能做得更好?


感谢您的建议。

查找分配给您可以执行的部门的所有任务:

tasks = List_of_tasks.objects.select_related('responsible').filter(responsible__department__department__icontains=department_query)

for t in tasks:
     print(t.task, t.responsible.noEmployee, t.responsible.name, t.responsible.surname)
最适合