django – 为什么我不能在编辑后保存我的模型实例?

django – 为什么我不能在编辑后保存我的模型实例?,第1张

概述我有一个模型,我可以很好地实例化,但一旦创建,如果我试图保存它我得到一个IntegrityError说主键必须是唯一的.是什么导致了这个? 还有其他模型继承自Node,他们给了我同样的问题. 这是我的模特: class Node(MPTTModel): title = models.CharField(max_length=255) parent = models.ForeignK 我有一个模型,我可以很好地实例化,但一旦创建,如果我试图保存它我得到一个IntegrityError说主键必须是唯一的.是什么导致了这个?

还有其他模型继承自Node,他们给了我同样的问题.

这是我的模特:

class Node(MPTTModel):    Title = models.CharFIEld(max_length=255)    parent = models.ForeignKey('self',null=True,blank=True,related_name='children')class Book(Node):    isbn13 = models.CharFIEld(max_length=14)    description = models.TextFIEld()

这是它生成的sql:

CREATE table "main_node" (    "ID" integer NOT NulL PRIMARY KEY,"Title" varchar(255) NOT NulL,"parent_ID" integer,"type" varchar(1) NOT NulL,"lft" integer unsigned NOT NulL,"rght" integer unsigned NOT NulL,"tree_ID" integer unsigned NOT NulL,"level" integer unsigned NOT NulL);CREATE table "main_book" (    "node_ptr_ID" integer NOT NulL PRIMARY KEY REFERENCES "main_node" ("ID"),"isbn13" varchar(14) NOT NulL,"description" text NOT NulL);

当我尝试保存预先存在的模型实例时会发生什么:

>>> b = Book.objects.create(Title='c+ for dummIEs',isbn13='111-1111111111',description='nt')>>> b.Title='c++ for dummIEs'>>> b.save()Traceback (most recent call last):  file "<console>",line 1,in <module>  file "C:\Users\JackIE\Desktop\Code\Projectname\main\models.py",line 56,in save    super(Book,self).save(self,*args)  file "C:\Python27\lib\site-packages\django\db\models\base.py",line 460,in save    self.save_base(using=using,force_insert=force_insert,force_update=force_update)  file "C:\Python27\lib\site-packages\django\db\models\base.py",line 553,in save_base    result = manager._insert(values,return_ID=update_pk,using=using)  file "C:\Python27\lib\site-packages\django\db\models\manager.py",line 195,in _insert    return insert_query(self.model,values,**kwargs)  file "C:\Python27\lib\site-packages\django\db\models\query.py",line 1436,in insert_query    return query.get_compiler(using=using).execute_sql(return_ID)  file "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py",line 791,in execute_sql    cursor = super(sqlInsertCompiler,self).execute_sql(None)  file "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py",line 735,in execute_sql    cursor.execute(sql,params)  file "C:\Python27\lib\site-packages\django\db\backends\util.py",line 34,in execute    return self.cursor.execute(sql,params)  file "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py",line 234,in execute    return Database.Cursor.execute(self,query,params)IntegrityError: PRIMARY KEY must be unique

以下是运行的查询:

>>> for q in connection.querIEs:...   print q['sql'] + "\n\n"...SELECT MAX("main_node"."tree_ID") AS "tree_ID__max" FROM "main_node"INSERT INTO "main_node" ("Title","parent_ID","type","lft","rght","tree_ID","level") VALUES (c+ for dummIEs,None,B,1,2,0)INSERT INTO "main_book" ("node_ptr_ID","isbn13","description") VALUES (1,111-1111111111,nt)SELECT (1) AS "a" FROM "main_node" WHERE "main_node"."ID" = 1  liMIT 1UPDATE "main_node" SET "Title" = c++ for dummIEs,"parent_ID" = NulL,"type" = B,"lft" = 1,"rght"= 2,"tree_ID" = 1,"level" = 0 WHERE "main_node"."ID" = 1INSERT INTO "main_book" ("node_ptr_ID",nt)

当我重新保存已创建的实例时,为什么要尝试插入main_book?

解决方法 你是否在你的任何模特中超越了“save()”方法?我有一个类似的问题,经过大量的挖掘,发现这是因为我过度使用的“保存()”中的一个小错误.

你能发布一下你的模型定义吗? (从生成的sql中,看起来你发布的内容不完整)

总结

以上是内存溢出为你收集整理的django – 为什么我不能在编辑后保存我的模型实例?全部内容,希望文章能够帮你解决django – 为什么我不能在编辑后保存我的模型实例?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存