get_or_create()问题

时间:2010-07-12 04:22:51

标签: python django-models save

从官方文档中我无法理解什么是默认参数。

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

这是否意味着它会查找与JohnLennon参数匹配的字段,而生日会插入?我可以使用别的东西而不是默认值吗?

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

它给我FileField错误无法解析字段中的关键字默认值

所以我需要寻找fiels,如果我发现它 - 更新数据。如果我没有找到它,我必须创建新的字段...但是,正如我所说,当finde当前字段时,它不会更新我的默认字段。

3 个答案:

答案 0 :(得分:4)

很明显 - 如果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有点生疏,但我相信它或多或少都是这样。

答案 1 :(得分:1)

有关get_or_create方法的更详细说明,请参阅this django文档。简而言之,它首先尝试使用提供的first_name和last_name,如果不是,则实例化并保存新对象,在这种情况下使用默认字典。返回值是相应的对象,无论是否创建了新对象,都返回True / False。

答案 2 :(得分:0)

你可以使用任何东西。默认如果你没有设置任何东西。