2013-07-19 52 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