【发布时间】:2018-04-11 15:46:18
【问题描述】:
我已经为这个问题苦苦挣扎了一段时间。我正在将我的一个应用程序从 Postgres 切换到 SQL Server 数据库,但我遇到了 ForeignKey 字段的问题。我正在使用 Django 1.11 并使用 django-pyodbc-azure 应用程序运行最新的 SQL Server 版本。
class Owner(models.Model):
name = models.TextField()
dog = models.ForeignKey('Dog', related_name='+')
class Dog(models.Model):
name = models.TextField()
owner = models.ForeignKey('Owner', null=True, related_name='+')
当我尝试插入新记录时,我收到以下消息:
dog = Dog.objects.create(name='Rex')
owner = Owner.objects.create(name='Mike', dog=dog)
dog.owner = owner
dog.save()
('23000', u"[23000] [Microsoft][ODBC Driver 13 for SQL Server][SQL 服务器]违反 UNIQUE KEY 约束 'UQ__owner__EF6DECB9214EF1D9'。无法在对象中插入重复键 'dbo.owner'。重复键值为 (NULL)。 (2627) (SQLExecDirectW)")
【问题讨论】:
-
两个对象之间没有必要存在 FK 关系。
-
奇怪的是在一个常规的 ForeignKey 字段中应该有一个
unique key约束。您是否使用unique=True约束将owner字段从其他字段转换? -
是的,我同意 Rob 的看法,但是我从其他程序员那里继承了这个项目,我需要像现在这样使用它......
-
@Haken Lid 不,伙计,这是用空数据库测试的。所以我怀疑它是转换...
-
可能是 SQL 服务器或数据库适配器对名为
owner的字段有问题?换句话说,它可能是一些表命名空间错误。错误消息说明了有关'dbo.owner'的内容,这似乎是某个数据库内部表。所以这个琐碎的应用程序代码应该在那里插入任何东西似乎很奇怪。
标签: sql-server django postgresql azure foreign-keys