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

아이디어의 개요가 될 수하십시오 Model이 속성 세트와 데이터 구조, 인스턴스 (고유 primary_key (pk로 식별), 숫자) 모델의 특정 인스턴스가되는 특정 속성 집합을가집니다 (예 : name="firstName").

Model.objects.get은 데이터베이스로 이동하여 특정 속성 또는 속성 집합을 사용하여 특정 인스턴스를 검색하는 데 사용됩니다.

+0

내가 단지를 업데이트하기 위해 모델의 (만들거나 존재) 인스턴스를 얻고, 당신은 의미합니까. 따라서 추가 필드로 업데이트 할 수 있습니다. –

+2

예. get은 모델을 가져 오는 것입니다. 그런 다음이를 변경 (예 :'instance.name = 'newName'')하고 저장하십시오 ('instance.save()'). 이것은 당신이 일반적으로 특정 인스턴스를 "업데이트"하는 방법입니다. Django의 "update"는 다른 의미를 가지고 있습니다 (https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once). 큰 따옴표. –

+2

인스턴스에 여분의 필드를 설정하는 것은 정상적인 개체에 물건을 설정하는 것과 같습니다. 그러나 당신이 모델에 그것을 원한다면 당신은 멋진 것들을해야합니다 :) –

1

장고 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