db_constraint=False
参数在Django使用外键,可以不实际在数据中产生约束。
例如:
class Group(models.Model):
id = models.CharField(max_length=50, null=False, primary_key=True)
class Device(models.Model):
GroupId = models.ForeignKey(to='Group', on_delete=models.CASCADE, db_constraint=False, null=True)
如果跨表查询,达到join的效果:
Device.objects.values(‘Group__name’)
实际执行sql:
SELECT `device_group`.`name` FROM `device_device` LEFT OUTER JOIN `device_group` ON (`device_device`.`Group_id` = `device_group`.`id`)
这样因为数据库中并没有Group_id,所以会报错:
OperationalError: (1054, "Unknown column 'device_device.Group_id' in 'on clause'")
还是会去找device_device表(对应Model Device)中的Group_id字段,即使我们设置了db_constraint=False
,这是因为Django使用外键的时候会默认生成名为当前字段_id
的字段。
如果需要和我们希望的字段对应上,应该使用参数db_colnum
, 即应该设置
GroupId = models.ForeignKey(to='Group', on_delete=models.CASCADE, db_constraint=False, null=True, db_colnum=GroupId)