【问题标题】:id of object is none after save in django在 django 中保存后对象的 id 为无
【发布时间】:2013-12-16 18:11:00
【问题描述】:

我正在遍历对象列表并保存。我需要在保存后立即生成新生成的 id 或指针 id,但它是无。

这是我的代码:

for category in category_list:
      saved_category = category.save()
      print saved_category.parentCategory_ptr_id      
      print saved_category.id

这会在例程运行后保存我的对象,但同样不会在这一行给我 id。

这是我的模型:

class ParentCategory(models.Model):
    name = models.CharField(max_length=255)

class Category(ParentCategory):
    description = models.CharField(max_length=255)

类别列表是这样创建的:

category_list = []
    for row in value_list:
        category = Category(description=row.description)
        category_list.append(category)


 return category_list

我做错了什么?

【问题讨论】:

  • object_list 是如何创建的?
  • @Alasdair 我添加了对象列表的代码
  • “category”有一个小写的“c”……是错字吗?
  • @daveoncode 是的。
  • 你能展示一下 value_list 是如何创建的吗?或者给我们一些背景信息这里的过程是什么?什么是返回 category_list 以及第一个函数去哪里?因为坦率地说,我认为问题在于您一开始没有保存类别对象,因此在到达第二个函数(使用 save_category)时它们停止存在(我可能完全错了,我只是没有足够的上下文)

标签: django django-models django-orm django-inheritance multi-table-inheritance


【解决方案1】:

问题在于:

saved_category = category.save()

必须是:

category = category.save()

列表中原来保存的对象就是包含id的对象。

【讨论】:

  • 可能更好的是:category.save() 不需要重新分配。
  • 你能解释一下为什么saved_category = category.save() 不起作用吗?
  • reassign 给我一个错误:NoneType 对象(我使用 django 1.11)
【解决方案2】:

我认为该对象不会被保存。似乎您正在创建的对象缺少足够的数据来满足数据库约束。您可能在某处使用过 try-catch,您会看到错误。尝试在ParentCategory 中将blank=True, null=True 添加到name 或在创建对象时提供名称。我希望这行得通...

【讨论】:

    【解决方案3】:

    他们不需要重新分配。

    category.save()
    

    当您调用 save() 方法时,对象被保存到数据库中并为对象分配 id(主键)。 Saving Objects Django Official

    Other same question asked on Stackoverflow and correct answer by Daniel Roseman

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 2021-11-15
      • 2015-08-17
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      相关资源
      最近更新 更多