Model类是由django inspectdb
生成的,我可以看到Id字段,这是从Legacy表转换而来的,这里的表不能改变,
class workFlowTemplate(models.Model):
rev = models.IntegerField(null=True, blank=True)
revtype = models.IntegerField(null=True, blank=True)
**id = models.IntegerField(null=True, blank=True)**
name = models.CharField(max_length=255, blank=True,primary_key=False)
class Meta:
db_table = 'workflow_template'
问题是当我尝试运行django时会抛出错误
CommandError: One or more models did not validate:
pHApp.workflowtemplate: "id": You can't use "id" as a field name, because each model automatically gets an "id" field if none of the fields have primary_key=True. You need to either remove/rename your "id" field or add primary_key=True to a field.
注意
the id is not primary key here in this case,
当我试图改变时 id = models.IntegerField(null = True,blank = True, primary_key = False)
问题仍然保持不变,同样的错误再次重复,如何避免这个问题?
答案 0 :(得分:1)
模型必须具有主键,因此您需要指定主键字段,如下所示:
my_primary_key = models.AutoField(primary_key=True)
id = models.IntegerField(null=True, blank=True)
然后它不会添加自动id列,您将不会收到此错误。
答案 1 :(得分:0)
如果您没有将另一个字段指定为PK,则默认情况下,列id
将由django添加。
在您的情况下,您将id
指定为您的字段,但未指定哪个字段应为主键。
解决方案 - 将另一个字段设置为主键,因为您无法重命名id