2013-07-19 53 views
1

我正在使用Django 1.5.1,我想保存或更新模型。Django保存或更新模型

我读了django文档,并且遇到了提供保存或更新的get_or_create方法。有一种用法,例如;

Model.objects.get_or_create(name='firstName',surname='lastName',defaults={'birthday': date(1990, 9, 21)}) 

defaults字段仅用于获取。在设置阶段,只设置姓名和姓氏。这是我从文件中了解到的。

所以我想做一些不同的设置名称,姓氏和生日,但得到不包括生日的姓名。我无法在文档和其他地方看到这样做的方式。

我该怎么做?

谢谢!

回答

3

get_or_create提供了一种获取或创建的方法。不保存或更新。它的想法是:我想获得一个模型,如果它不存在,我想创建并获取它。

在Django中,您不必担心获取名称或姓氏或任何属性。你得到一个具有所有属性的模型实例,即。

instance = Model.objects.get(name='firstName',surname='lastName') 

print instance.birthday 
print instance.name 
print instance.surname 

想法的概述可以是:a Model是一种数据结构与一组属性,实例是模型(由primary_keypk唯一标识),一个数字)的特定实例,其具有特定的一组属性(例如name="firstName")。

Model.objects.get用于访问数据库并检索具有特定属性或属性集的特定实例。

+0

你的意思,我只得到一个实例模型(创建或存在)来更新它。所以我可以用额外的字段进行更新 –

+2

是的。得到是为了得到模型。然后你可以改变它(例如'instance.name ='newName'')并保存它('instance.save()')。这是你通常如何“更新”一个特定的实例。请注意,Django中的“update”[具有其他含义](https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once),这就是为什么我添加双引号。 –

+2

在实例上设置额外字段就像设置普通对象上的东西一样。但是,如果你想在模型上,那么你必须做一些花哨的东西:) –

1

由于Django的1.7有update_or_create

obj, created = Person.objects.update_or_create(
    first_name='John', 
    last_name='Lennon', 
    defaults=updated_values 
) 

你给是将被用于查找现有对象的那些参数,该defaults是将现有的或新创建的对象上更新的参数。

返回元组,obj是创建或更新的对象,created是指定是否创建新对象的布尔值。

文档:https://docs.djangoproject.com/en/1.8/ref/models/querysets/#update-or-create