有人请向我解释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
。或者是什么?
答案 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)。