我可以让Django在创建时返回记录的ID吗?

时间:2013-10-22 22:19:36

标签: python mysql django sqlite

我正在使用object.create将记录存储到django数据库中:

     result = MyObject.objects.create(var1='foo',
                                      var2='bar',
                                         ...
                                     )

执行此操作后result__str__返回的任何字符串(我通过将其更改为return self.id来确认)。我想要访问主键值,因为在某些情况下,下一步是创建另一个通过外键引用此记录的记录,但我真的希望__str__返回比这一点。

我意识到我可以抓住最近创建的,但这将是多个并发用户的线程代码,因此有可能以真正不幸的方式失败。

我正在使用SQLite数据库进行开发,但是会切换到MySQL进行生产,所以如果有办法解决这个需要mySQL的问题我可以立即进行切换。

更新 - 从不介意

好的,我弄清楚发生了什么。在第一次通过调用创建时没有发生,而result被定义时它不是一个对象。

谢谢,所有。为了回应你的意见而进一步挖掘是我找到它的原因。

< 尴尬地尴尬>

3 个答案:

答案 0 :(得分:1)

# No reporters are in the system yet.
>>> Reporter.objects.all()
[]

# Create a new Reporter.
>>> r = Reporter(full_name='John Smith')

# Save the object into the database. You have to call save() explicitly.
>>> r.save()

# Now it has an ID.
>>> r.id
1

# Now the new reporter is in the database.
>>> Reporter.objects.all()
[<Reporter: John Smith>]

# Fields are represented as attributes on the Python object.
>>> r.full_name
'John Smith'

另请参阅:https://docs.djangoproject.com/en/1.5/intro/overview/

答案 1 :(得分:0)

调用create的操作会将新实例保存到数据库中。 result现在有一个pk属性,即其ID。

请注意,result 是实际对象,而不是__str__的结果。另外,您可以使用对象而不是其ID来设置为另一个对象的外键。

答案 2 :(得分:0)

result.pk应该为您提供主键 “pk”是字段的别名,它被定义为主键。