如何在Django中联接3个查询表 [英] How to join 3 tables in query with Django
本文介绍了如何在Django中联接3个查询表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
models.py
models.py
class Employee(models.Model):
emp_no = models.IntegerField(primary_key=True)
first_name = ...
last_name = ...
# emp_no first_name last_name
------ ---------- ----------
10005 Christian Erde
class DeptEmp(models.Model):
emp_no = models.ForeignKey(Employee, on_delete=models.CASCADE)
dept_no = models.ForeignKey(Department, on_delete=models.CASCADE)
# dept_no_id emp_no_id
---------- ----------
d003 10005
class Department(models.Model):
dept_no = models.CharField(primary_key=True, max_length=4)
dept_name = models.CharField(unique=True, max_length=40)
# dept_no dept_name
---------- ---------------
d003 Human Resources
views.py
class EmpList(ListView):
queryset = Employee.objects.all().select_related('deptemp').select_related('department')
employee_list.html
employee_list.html
{% for emp in object_list %}
{{ emp.first_name }}
{{ emp.last_name }}
{{ emp.department.dept_name }}
{% endfor %}
我在浏览器中收到以下错误消息:无效的字段名称 在select_related中给出:'deptemp','department'.选择是:(无)
I got this error message on the browser: Invalid field name(s) given in select_related: 'deptemp', 'department'. Choices are: (none)
推荐答案
与选择相关"
返回一个查询集,该查询集将遵循"外键关系.
Returns a QuerySet that will "follow" foreign-key relationships.
from django.db import models
class City(models.Model):
# ...
pass
class Person(models.Model):
# ...
hometown = models.ForeignKey(
City,
on_delete=models.SET_NULL,
blank=True,
null=True,
)
class Book(models.Model):
# ...
author = models.ForeignKey(Person, on_delete=models.CASCADE)
然后调用 Book.objects.select_related('author__hometown')
例如:
class EmpList(ListView):
queryset = DeptEmp.objects.all().select_related('emp_no').select_related('dept_no')
employee_list.html
employee_list.html
{% for deptemp in object_list %}
{{ deptemp.emp_no.first_name }}
{{ deptemp.emp_no.last_name }}
{{ deptemp.dept_no.dept_name }}
{% endfor %}
这篇关于如何在Django中联接3个查询表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文