Python 如何使用下表中的字段从表中搜索数据
所以,也许我的问题不够清楚。。。我将尝试在示例中演示它 我有三张桌子: models.pyPython 如何使用下表中的字段从表中搜索数据,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
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)
最适合