get_or_create() 问题

2 投票
3 回答
9504 浏览
提问于 2025-04-16 01:09

从官方文档中,我不太明白什么是默认参数。

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

这是不是意味着它会查找同时匹配 JohnLennon 的字段,然后生日字段会自动插入?我可以用别的东西代替默认值吗?

我应该用什么方法来清空表格中的所有字段(模型)呢?

它给我报了一个 FileField 错误,说无法解析字段中的默认关键字。

所以我需要查找字段,如果找到就更新数据。如果没找到,我就得创建一个新字段……但是,按照我的理解,当找到现有字段时,它不会更新默认字段。

3 个回答

0

你可以使用任何东西。如果你什么都不设置,系统会默认使用一个值。

1

你可以参考这篇 Django 文档,里面对 get_or_create 方法有更详细的解释。简单来说,它首先会尝试根据你提供的名字和姓氏去查找一个对象。如果找不到,它就会创建一个新的对象并保存,这时候会使用默认的设置。最后,它会返回找到的对象,以及一个 True 或 False,表示是否创建了一个新对象。

4

这很简单明了——如果 get_or_create 找到了你查询的对象,那么 defaults 这个参数就没什么用。但如果它创建了一个新对象,那么存储在 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 技能有点生疏,但我相信大致是这样的。

撰写回答