【问题标题】:Django SQL Server ForeignKey that allows NULL允许 NULL 的 Django SQL Server ForeignKey
【发布时间】: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


【解决方案1】:

标签所有者有问题,试试:

dog.owner_id = owner.id

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 2020-08-03
    • 2013-05-11
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多