django - 创造了什么意思?

时间:2013-11-10 11:43:47

标签: django django-queryset

有人请向我解释created,以及在django中使用它的位置和方式。

我已经看到过这样的事情:

obj, created = Person.objects.get_or_create(first_name=’John’, last_name=’Lennon’, defaults={’birthday’: date(1940, 10, 9)})

甚至在信号中:

@receiver(post_save, sender=Article)
def create_approval(sender, **kwargs):
    if kwargs.get("created", False):
        approval = Approval.objects.create(article_id=kwargs.get('instance').id)

我真的需要知道这一点。任何帮助都感激不尽。谢谢。

修改

这里,从以上代码:

    if kwargs.get("created", False):

created在这里意味着什么?它是否将created的值指定为False。或者是什么?

2 个答案:

答案 0 :(得分:3)

Django的模型提供了一种称为get_or_create的便捷方法,它根据指定的标准(kwargs)查找对象。如果条件不匹配,则会创建一个新对象。

现在,我们无法在视图中确定返回的对象是已创建还是已存在(特别是如果您没有created_datetime或类似字段),因此created 。它是一个布尔变量,如果ORM创建了一个新对象,则设置为True,如果检索到现有对象,则设置为False

现在,在你的场景中:

obj, created = Person.objects.get_or_create(first_name=’John’, last_name=’Lennon’, defaults={’birthday’: date(1940, 10, 9)})

这就是说,用Person

给我first_name = John, last_name = Lennon, birthday = ...对象

如果找不到,请为我创建一个新的。

defaults在此方案中创建对象时指定字段birthday的初始值。

这也等同于写作

obj = None
try:
    obj = Person.objects.get(first_name=’John’, last_name=’Lennon’)
except Person.DoesNotExist:
    obj = Person.objects.create(’birthday’ = date(1940, 10, 9), first_name='John', last_name = 'Lennon')

在信号接收器中,kwargs是具有自定义键值对的字典。 当您查看信号的文档时,我们可以说post_save具有以下签名

django.db.models.signals.post_save

post_save(sender, instance, created, raw, using, update_fields)

这与

相同
post_save(sender, **kwargs) #where the rest of the args are a dictionary saved in **kwargs

此处,created具有相似的含义。它正在通知信号是instance是新创建还是更新的。

因此,如果created = True,则创建了新对象。 created=False,对象可能已更新。

答案 1 :(得分:0)

created是get_or_create()的布尔返回变量。如果使用get_or_create()调用创建了对象(SQL INSERT),那么它是True,否则(使用SELECT获取对象)它是False

第二个:MyModel.objects.create()强制创建(INSERT)。