如何在Django中加入非主键和外键列的查询
Posted
技术标签:
【中文标题】如何在Django中加入非主键和外键列的查询【英文标题】:how to join a query on non primary key and foreign key column in Django 【发布时间】:2020-05-30 07:04:06 【问题描述】:我有两个模型,将唯一键列作为其他表的外键。
class Employee(models.Model):
EmployeeId = models.IntegerField(unique=True)
Employee_Name = models.CharField(max_length=100)
class Release(models.Model):
EmployeeId = models.ForeignKey(Employee, on_delete=models.CASCADE, to_field="EmployeeId")
当我尝试连接查询时,它正在对 Employee 表的主键列进行连接。
下面是我期待加入Employee.EmployeeId =Release.EmployeeId
的连接查询
r=Release.objects.all().select_related('EmployeeId')
但上面的查询给出了
print(str(r.query))
输出:
'SELECT "app_release"."id", "app_release"."EmployeeId_id", "app_employee"."id", "app_employee"."EmployeeId", "app_employee"."Employee_Name"
FROM "app_release" INNER JOIN "app_employee"
ON ("app_re
lease"."EmployeeId_id" = "app_employee"."id")'
我不想要的,而不是
ON ("app_release"."EmployeeId_id" = "app_employee"."id")'
我想要
ON ("app_release"."EmployeeId_id" = "app_employee"."EmployeeId")'
【问题讨论】:
你运行makemirations
和migrate
了吗?
是的,我做到了。
form.save 正在使用外键 empoyee.EmpoyeeId.. 我在 Employee 表中有一个数据:id=1,employeeid=123,Name='xyz'。以发布形式。我给employeeid = 123,并保存表格。它工作正常。
***.com/a/43131616/5921826
【参考方案1】:
因此您需要将 Employee.EmployeeId 声明为主键并删除唯一键,因为主键本身是唯一的。 试试这个代码..在员工模型中
EmployeeId = models.IntegerField(primary_key=True)
如果你不想修改表格,那么你可以使用原始查询,请参考下面的链接
raw query in Django
请告诉我它是否有效
【讨论】:
不修改表的任何其他选项。以上是关于如何在Django中加入非主键和外键列的查询的主要内容,如果未能解决你的问题,请参考以下文章