답변:
get_or_create 문서 에서 :
# get_or_create() a person with similar first names.
p, created = Person.objects.get_or_create(
first_name='John',
last_name='Lennon',
defaults={'birthday': date(1940, 10, 9)},
)
# get_or_create() didn't have to create an object.
>>> created
False
설명 :
유사성을 평가할 필드는 외부에서 언급해야합니다 defaults
. 나머지 필드는에 포함되어야 defaults
합니다. CREATE 이벤트가 발생하면 모든 필드가 고려됩니다.
단일 변수 대신 튜플로 반환 해야하는 것처럼 보입니다.
customer.source,created = Source.objects.get_or_create(name="Website")
save()
는 중복입니까?
create()
객체를 만들고 한 번에 저장하고 필요하지 않습니다.save()
get_or_create
튜플을 반환합니다.
customer.source, created = Source.objects.get_or_create(name="Website")
customer.source = Source.objects.get_or_create(name="Website")[0]
customer.source, _ = Source.objects.get_or_create(name="Website")
튜플이 더 명확하게 반환되어 향후 버그를 피할 수 있기 때문에 선호합니다 .
get_or_create()
튜플을 반환합니다 :
customer.source, created = Source.objects.get_or_create(name="Website")
created
→ 부울 값이 있거나 생성되었는지 여부
customer.source
→get_or_create()
방법 의 대상이 있습니다.
발생한 문제는의 문서화 된 기능입니다 get_or_create
.
"defaults"이외의 키워드 인수를 사용할 때의 반환 값은 get_or_create
인스턴스입니다. 그것이 반환 값의 파 렌스를 보여주는 이유입니다.
customer.source = Source.objects.get_or_create(name="Website")[0]
올바른 값을 얻는 데 사용할 수 있습니다 .
다음은 설명서 링크입니다 : http://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create-kwargs