我正在使用object.create将记录存储到django数据库中:
result = MyObject.objects.create(var1='foo',
var2='bar',
...
)
执行此操作后result
是__str__
返回的任何字符串(我通过将其更改为return self.id
来确认)。我想要访问主键值,因为在某些情况下,下一步是创建另一个通过外键引用此记录的记录,但我真的希望__str__
返回比这一点。
我意识到我可以抓住最近创建的,但这将是多个并发用户的线程代码,因此有可能以真正不幸的方式失败。
我正在使用SQLite数据库进行开发,但是会切换到MySQL进行生产,所以如果有办法解决这个需要mySQL的问题我可以立即进行切换。
好的,我弄清楚发生了什么。在第一次通过调用创建时没有发生,而result
被定义时它不是一个对象。
谢谢,所有。为了回应你的意见而进一步挖掘是我找到它的原因。
< 尴尬地尴尬>
答案 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'
答案 1 :(得分:0)
调用create
的操作会将新实例保存到数据库中。 result
现在有一个pk
属性,即其ID。
请注意,result
是实际对象,而不是__str__
的结果。另外,您可以使用对象而不是其ID来设置为另一个对象的外键。
答案 2 :(得分:0)
result.pk应该为您提供主键 “pk”是字段的别名,它被定义为主键。