get_or_create() 问题
Posted
技术标签:
【中文标题】get_or_create() 问题【英文标题】:get_or_create() question 【发布时间】:2010-07-12 04:22:50 【问题描述】:从官方文档中我无法理解默认参数是什么。
obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon',
defaults='birthday': date(1940, 10, 9)
这是否意味着它将查找与John
和Lennon
参数匹配的字段,并且仅插入生日?我可以使用其他东西代替默认值吗?
我应该使用什么方法来清理表(模型)中的所有字段?
它给我 FileField 错误无法解析字段中的关键字默认值
所以我需要寻找字段,如果我找到了 - 更新数据。如果我没有找到它,我必须创建新字段...但是,据我了解,当找到现有字段时,它不会更新我的默认字段。
【问题讨论】:
【参考方案1】:很明显——如果get_or_create
找到查询对象,defaults
keword 什么也不做。但如果它创建对象,则存储在obj
中的实例具有birthday
字段(在您的示例中)填充了相应的值。您可以将任何字典作为defaults
传递,只要它的键是您正在查询的模型的有效字段名称。
要清理整个表,你应该使用类似的东西:
Model.objects.all().delete()
相当于:
DELETE FROM app_model WHERE True;
要在每个对象中设置一些字段(每行中的一些列),有update()
方法:
Model.objects.all().update( some_field = "" )
翻译为:
UPDATE app_model SET `some_field` = '' WHERE True;
我的 sql 有点生疏了,但我相信或多或少会这样。
【讨论】:
所以它不适合我。因为我需要寻找具有正确名称的字段。如果我找到它,我需要更新其他字段,但如果我没有找到它,我必须创建它结束写入所有字段。【参考方案2】:您可以参考this django 文档以获取有关 get_or_create 方法的更详细说明。简而言之,它首先尝试获取提供的 first_name 和 last_name,如果没有,它会实例化并保存一个新对象,在这种情况下使用默认字典。并且返回值是对应的对象和True/False是否创建了新对象。
【讨论】:
它给我 FileField 错误无法解析字段中的关键字默认值 它应该是默认值,而不是默认值(注意缺少's')【参考方案3】:你可以使用任何东西。如果您没有设置任何内容,则默认为。
【讨论】:
这本词典是什么意思?里面的参数会做什么? 这个叫做关键字参数,它将调用参数匹配到参数名称调用的函数。以上是关于get_or_create() 问题的主要内容,如果未能解决你的问题,请参考以下文章
Django - SQL 批量 get_or_create 可能吗?
使用 get_or_create 返回的 MultipleObjects
SQLAlchemy 是不是与 Django 的 get_or_create 等效?