장고에서 "get_or_create()"를 사용하는 방법은 무엇입니까?
사용하려고 합니다.get_or_create()
양식의 일부 필드에 대해 입력합니다. 그러나 입력하려고 하면 500개의 오류가 발생합니다.
선 중 하나는 다음과 같습니다.
customer.source = Source.objects.get_or_create(name="Website")
위 코드에 대한 오류는 다음과 같습니다.
"(<소스:웹사이트>, 거짓): "고객.source"는 "Source" 인스턴스여야 합니다.
설명서에서 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")
get_or_create
튜플을 반환합니다.
customer.source, created = 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()
방법.
@Tobu 답변과 @mipadi 코멘트에 이어, 생성된 플래그에 관심이 없다면, 저는 다음을 사용할 것입니다.
customer.source, _ = Source.objects.get_or_create(name="Website")
현재 발생하는 문제는 의 문서화된 기능입니다.get_or_create
.
"기본값"이 아닌 키워드 인수를 사용할 경우 반환 값은 다음과 같습니다.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
get_or_create 메서드는 실제로 튜플을 반환합니다.
get_or_create 메서드의 트릭은 실제로 (개체, 생성됨)의 튜플을 반환한다는 것입니다.첫 번째 요소는 검색하려는 모델의 인스턴스이고 두 번째 요소는 인스턴스가 생성되었는지 여부를 알려주는 부울 플래그입니다.True는 get_or_create 메서드에 의해 인스턴스가 생성되었음을 의미하고 False는 데이터베이스에서 검색되었음을 의미합니다.
따라서 소스 인스턴스를 가져오는 것과 같은 작업을 수행할 수 있습니다.
``` customer.source = Source.objects.get_or_create(name="Website")[0]
```
get_or_create()는 두 개의 값을 포함하는 튜플을 반환합니다. 첫 번째 값은 개체이고 두 번째 값은 다음과 같이 새 개체가 생성되었는지 여부를 나타내는 부울 값입니다.
# 1st # 2nd
(object, boolean)
따라서 객체와 부울 값을 모두 원하는 경우 변수를 하나 더 추가합니다.created
끝나고customer.source
아래와 같이:
# Here
customer.source, created = Source.objects.get_or_create(name="Website")
# object # boolean
그리고, 부울 값이 없는 객체만 원한다면,[0]
바로 get_or_create()
아래와 같이:
# Here ↓↓↓
customer.source = Source.objects.get_or_create(name="Website")[0]
# object
그리고 객체 없이 부울 값만 원하는 경우에는[1]
바로 get_or_create()
아래와 같이:
# Here ↓↓↓
created = Source.objects.get_or_create(name="Website")[1]
# boolean
중요한 경고입니다.
get_or_create, https://docs.djangoproject.com/en/4.0/ref/models/querysets/ 을 사용하기 전에 다음 사항을 주의해야 합니다.경고
이 방법은 데이터베이스가 키워드 인수의 고유성을 적용한다고 가정할 때 원자적입니다(unique 또는 unique_together 참조).키워드 인수에 사용된 필드에 고유 제약 조건이 없는 경우 이 메서드에 대한 동시 호출로 인해 동일한 매개 변수를 가진 여러 행이 삽입될 수 있습니다.
언급URL : https://stackoverflow.com/questions/1941212/how-to-use-get-or-create-in-django
'sourcetip' 카테고리의 다른 글
회계 응용 프로그램 달러 금액에 float 또는 decimal을 사용합니까? (0) | 2023.06.17 |
---|---|
파이어스토어에서 지역 "근처" 쿼리를 실행하는 방법은 무엇입니까? (0) | 2023.06.17 |
Android에서 전체 화면 활동? (0) | 2023.06.17 |
데이터 프레임의 선택한 열에 NA(누락) 값이 포함된 행의 부분 집합 (0) | 2023.06.17 |
머리글을 맨 위 행으로 바꾸기 (0) | 2023.06.17 |