Django关联两张模型表并获取全部字段报错,如何解决?
解决方法
报错原因很明确:DeptName是DepartmentModel的字段,并非EmployeeModel的直接字段,所以不能直接在only()里写这个字段名。要获取关联模型的字段,需要通过**双下划线__**指定关联路径,结合select_related()的关联字段EmpPosition来访问。
正确写法(返回模型实例)
使用EmpPosition__DeptName指定关联模型的字段,代码如下:
emp_obj = EmployeeModel.objects.select_related('EmpPosition').only( 'EmpID', 'EmpName', 'Email', 'EmpLevel', 'EmpPosition__DeptName' )
查询后,你可以通过emp_obj.EmpPosition.DeptName获取每个员工对应的部门名称,同时select_related()会一次性拉取关联数据,避免N+1查询问题。
可选:返回字典格式数据
如果不需要模型实例,只想获取字段键值对,可使用values()方法:
emp_data = EmployeeModel.objects.select_related('EmpPosition').values( 'EmpID', 'EmpName', 'Email', 'EmpLevel', 'EmpPosition__DeptName' )
返回结果为字典列表,每个字典包含你指定的所有字段。
额外说明
确保你的模型外键定义正确,比如EmployeeModel的EmpPosition字段确实指向DepartmentModel:
class DepartmentModel(models.Model): DeptName = models.CharField(max_length=100) # 其他部门字段... class EmployeeModel(models.Model): EmpID = models.CharField(max_length=20) EmpName = models.CharField(max_length=50) Email = models.EmailField() EmpLevel = models.IntegerField() EmpPosition = models.ForeignKey(DepartmentModel, on_delete=models.CASCADE) # 其他员工字段...
内容的提问来源于stack exchange,提问作者ReaL_HyDRA
相关产品推荐
相关产品推荐

