今天,在使用django model建表的过程中,遇到一个诡异的bug,django一直给我提示(models.E012) 'unique_together' refers to the non-existent field。我一直没明白,错误代码如下
class Test(models.Model):
index = models.IntegerField
score = models.IntegerField
class Meta:
unique_together = ('index', 'score')
经过多次调试,发现删除meta能够建表,加上meta就报错。原因在于这时的index和score是一个字段类,在meta中,Django检测并枚举字段实例(即通过运行isinstance(v, Field))来创建字段。因此,在这种情况下,无法使用meta。我们只需加上一对括号,index和score就变成了字段实例,就能正确运行了。正确的代码如下:
class Test(models.Model):
index = models.IntegerField()
score = models.IntegerField()
class Meta:
unique_together = ('index', 'score')