型号:
class List(models.Model):
Lid = models.AutoField(primary_key=True)
Name = models.CharField(max_length=100)
addr1 = models.CharField(max_length=100)
addr2 = models.CharField(max_length=100)
City = models.CharField(max_length=40)
State = models.ForeignKey(State,blank=True, on_delete=models.DO_NOTHING, default=None,to_field="state",db_column="State") #,to_field="state",db_column="State"
以下是尝试迁移时出现的错误,
IntegrityError(django.db.utils.IntegrityError:表"list"中主键为"1"的行具有无效的外键:list。State包含的值"在State.State.中没有相应的值
如何解决此问题?在谷歌上搜索解决方案后,我确实添加了"blank=True"和on_delete=models.DO_NOTHING,但仍然没有成功。
如果您希望从List中有一行,从State中有一列。它可以是o2o密钥(不管是哪种型号),也可以在List中使用外键。但是:DB表状态在db_column="State"
中应该只有唯一的键。
如果您想拥有列表中的每一行和状态中的某些行。外键应该在State模型中,而不是在List中。
之后:在迁移时,您应该像state.state.中那样将列list.state转换为value_type
例如,您的类型(list.state)=字符串,类型(state.sstate)=整数。我知道,没有它也可以工作,但最好在迁移时检查一下。如果您在list.state中有default=None,也可以将every_list_row.state = ''
转换为every_list_row.state = None
,以避免将来在导出等时出现问题。
如果您收到ForeignObjectException-对象在list_row.state
上不存在:你可以创建这样的东西:
@property
def get_state(self):
return hasattr(list_row, 'state') and list_row.state or ''
之后:list_row.get_state