【问题标题】:Django: Key (slug)=(*) already existsDjango:键(slug)=(*)已经存在
【发布时间】:2018-07-31 13:11:38
【问题描述】:

我对 Django 和 python 还很陌生,我想了解更多关于如何填充我的 Postgres 数据库的信息。

这是我当前的模型:models.py

from django.template.defaultfilters import slugify

class Skill(models.Model):
    name = models.TextField()
    slug = models.TextField(unique = True)
    def __unicode__(self):
        return "%s" % self.name

和我的观点:views.py

r = r.json()

try:
    Skills = r['data']['skills']
except:
    pass

for skill in Skills:
    skill = Skill.objects.create(name=skill['name'],slug=slugify(skill['name']))

我收到错误: 异常类型:IntegrityError

详细信息:键 (slug)=(systems-engineering) 已存在。

我一直在阅读similar post,尽管仍然无法解决我的问题。当对象已存在于数据库中时,objects.create() 将显示错误,但上面的代码出现错误。 “unique = True”会导致错误吗?以及如何解决这个问题?

跟进

我的问题比我想象的要简单。我能够运行psql 交互式终端并查看我的数据填充。我无法在管理站点上看到它,因为我错过了在 admin.py 上注册模型

【问题讨论】:

  • Skills 的内容是什么?
  • “技能”:[ {“名称”:“系统工程”},{“名称”:“消费电子产品”},{“名称”:“产品开发”},...]
  • 你能提供你的错误的完整追溯吗?
  • 这是我的完整版traceback 谢谢!

标签: python django


【解决方案1】:

当您提供unique=True 时,该字段将在整个表格中是唯一的。因此,当您尝试添加已经在数据库中的数据时,它会引发错误。有关详细信息,请参阅此official doc

【讨论】:

  • 我的问题是尚未添加数据,但它会将数据识别为重复。我试着做try & except 虽然它从不执行objects.create
  • 你确定它永远不会执行到数据库吗? objects.create() 总是创建一个实例。如果它真的不存在,你需要在你的数据库中检查它。
  • 我查看了数据库,现在看到了对象。!
猜你喜欢
  • 2016-06-12
  • 2019-10-18
  • 2011-03-06
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 2017-06-14
相关资源
最近更新 更多