如何解决如何解决 Django 中的以下错误:“OperationalError:外键不匹配”
每当我尝试保存到 sqlite 数据库中的表时,都会收到以下错误:
外键不匹配 - “procedure_tbl”引用“filename_tbl”
在models.py中,这些是错误所指的表:
class FilenameTbl(models.Model):
rowid = models.AutoField(auto_created=True,primary_key=True,serialize=False,verbose_name='FileID',db_column='rowid')
filename = models.TextField(blank=True,null=True)
creation_datetime = models.TextField(blank=True,null=True)
class Meta:
managed = False
db_table = 'filename_tbl'
ordering = ['rowid']
class ProcedureTbl(models.Model):
rowid = models.AutoField(auto_created=True,verbose_name='ProcedureID',db_column='rowid')
...
filename_id = models.ForeignKey(FilenameTbl,db_column='filename_id',to_field='rowid',null=True,blank=True,on_delete=models.SET_NULL)
class Meta:
managed = False
db_table = 'procedure_tbl'
ordering = ['rowid']
可以从表和查询集中读取数据,如下所示返回正确的数据:
queryset = FilenameTbl.objects.values(
'rowid','filename','proceduretbl__rowid')
用于正确写入/更新到 ProcedureTbl 表函数的原始 sqlite 命令。
如果我从 ProcedureTbl 中删除了 filename_id,那么数据可以保存到表中:
queryset = ProcedureTbl.objects.get(procedure_number=10)
queryset.reviewer_comments='can save this'
queryset.save()
解决方法
这更像是一种解决方法。
在创建表时,我没有为 ROWID 创建别名,只是将 ROWID 称为主键。这适用于 RAW SQLite 命令,但似乎 Django 不能很好地处理 ROWID。
创建别名后,“外键不匹配”错误消失了:
var=$(date +'%A %B %-d')
阅读这些文章后,我有了创建别名的想法
Why does referencing a SQLite rowid cause foreign key mismatch?
Why can't you use SQLite ROWID as a Primary key?
感谢大家的时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。