gpt4 book ai didi

Django get_or_create 方法不返回确切的对象

转载 作者:行者123 更新时间:2023-12-03 10:22:20 32 4
gpt4 key购买 nike

这是我的models.py:

class Foo(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=30)

在 django manage.py shell 中:

>>> a,b = Foo.objects.get_or_create(name='hi')
>>> b
True
>>> vars(a)
{'_state': <django.db.models.base.ModelState object at 0x02761390>, 'id': None,
'name': 'hi'}

这里的问题是自定义的 id 属性没有值。如果我继续执行以下操作:

>>> c = foo.objects.get(name='hi')
>>> c.id
1
>>> a is c
False

因此,新创建的对象(由 c 表示)现在已经存在,但是 b 不是对它的精确引用,就像 c 是.

这是一个错误吗?我的 django 版本是 1.6.5。

最佳答案

默认情况下,如果您没有为模型指定 id 字段,Django will create自动字段:

id = models.AutoField(primary_key=True)

在您的例子中,您只创建了 IntegerField。我想这就是重点。在数据库中,它仍然会递增,但 django 不会将数据库中的 id 值分配给 get_or_create

返回的对象

顺便说一句,在你的问题中:

>>> b is c
False

b - 是一个 bool 值。我想你是想做

>>> a is c

但这也不是一个好主意。如果你想比较django模型对象,使用==,而不是:

>>> a == c

无论如何你都会得到 False,因为 aid 设置为 None

关于Django get_or_create 方法不返回确切的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25681881/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com