python - 如何使用以下 2 个表中的字段从表中搜索数据
问题描述
所以,也许我的问题不够清楚......我会尝试在例子中展示它。
我有 3 个表: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)
在 List_of_tasks 表中查找 TASKS 或RESPONSIBLE人员很容易,但我想找到例如分配给部门的所有任务......两个表下来......
如您所见,我创建了自己的方法,该方法可以按我的意愿工作,但效率不高。如果表 Employee 或 List_of_tasks 中有很多记录,则此搜索非常慢。
...
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)
推荐阅读
- r - 重复测量时间方差分析
- pine-script - 如何在脚本中添加数字后缀?K 千, M 万
- html - 叠加层上的 CSS 文本
- java - 如何在javafx中的单元格中显示字符串数组
- c# - 如何编辑 NuGet 中间件包?
- java - 在Java中从没有原始对象信息的字符串反序列化对象
- python - 将字符串转换为具有多个值的字典
- javascript - After Effects Aerender 和 JSON sourceData
- dart - 如何将 FAB 转换为 Flutter 中的操作菜单
- c# - C# 代码适用于 Visual Studio 2019,但不适用于在线编译器