为什么postgreSQL找不到外键

2024-05-18 17:41:31 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么django在创建引用刚创建的键的记录时报告“缺少外键错误”?在

看看这个代码:

def doRegister(request,username, email, password):
    user = User.objects.create_user( username, email, password )
    realm = createWhereAvailable( user )
    realm.save()
    return redirect('index')

def createWhereAvailable( user ):
    #some logic here... note: Realm extends django's Model
    return Realm( x=x, y=y,  user=user, name=generateRandomRealmName(x, y) )

doRegister视图在领域.保存():

^{pr2}$

可以翻译"the key (user_id)=(8) can't be found in table myapp_user"

但用户中id=8的记录存在

> > User.objects.get(id=8)
<User: tg>

注:此外,id=8在这里被回收。已经为先前的记录提供了它,该记录随后被删除。在


编辑

即使是django管理也不能添加引用此用户的领域记录。但奇怪的是,对于没有被回收的旧记录(id=1)来说,这是可以接受的。在

我怀疑这可能与回收有关,因为有些人遇到了类似的问题(重复的密钥):http://www.vlent.nl/weblog/2011/05/06/integrityerror-duplicate-key-value-violates-unique-constraint/或{a2}

我在下面的桌子上放了更多的东西

这是管理.pysql命令:

BEGIN;
CREATE TABLE "myapp_realm" (
    "id" serial NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED,
    "name" varchar(30) NOT NULL,
    #... some other fields stripped for consision
)
;

COMMIT;

以下是pgadmin的表序列化:

CREATE TABLE myapp_realm
(
  id serial NOT NULL,
  user_id integer NOT NULL,
  name character varying(30) NOT NULL,
  #... some other fields
  CONSTRAINT myapp_realm_pkey PRIMARY KEY (id),
  CONSTRAINT user_id_refs_id_9302d6bb FOREIGN KEY (user_id)
      REFERENCES myapp_user (id) MATCH Unknown
      ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED
)
WITH (
  OIDS=FALSE
);

Tags: djangokeynameiddef记录usernamenot

热门问题