원래 데이터 원본으로 돌아가기
다음 방법을 사용하면 쿼리를 실행할 수 있지만 ormar 모델을 반환하는 대신 사전 또는 튜플 목록을 반환합니다.
-
values(fields = None, exclude_through = False) -> List[Dict]
-
values_list(fields = None, exclude_through = False, flatten = False) -> List
-
쿼리 세트 에이전트
QuerysetProxy.values(fields = None, exclude_through = False) 방법
QuerysetProxy.values_list(fields = None, exclude_through= False, flatten = False) 방법
!!!위험 값과 값 _list는 결과를 ormar 모델로 분석하는 것을 건너뛰므로 결과의 유효성을 건너뜁니다!
!!!경고. 결과 목록의 각 항목은 쿼리 결과 행의 일대일 반영입니다. 일대다 또는 다대다 관계가 있는 경우 행이 구문 분석되지 않으므로 상위 행에 관련 행이 여러 개 있는 경우 결과 항목에 중복 열 값이 나타납니다.
값
values(fields: Union[List, str, Set, Dict] = None, exclude_through: bool = False) -> List[Dict]
데이터베이스의 열을 나타내는 값의 사전 목록을 반환합니다.
필드 매개 변수를 사용하여 필드() 메서드와 동일한 매개 변수 집합을 허용하는 필드의 하위 집합을 선택할 수 있습니다.
필드를 값(필드)으로 전달하는 것은 실제로 필드(필드).값()을 호출하는 바로 가기입니다.
!!!필드에 전달할 수 있는 항목과 중첩 모델 필드를 선택하는 방법에 대해 자세히 알아보려면 열 선택 문서를 참조하십시오.
필터() 및 ()를 제외하고 조건을 제공하여 행 수를 제한할 수 있지만 하나의 행(또는 행이 없음!)만 기준을 충족하더라도 응답으로 목록을 반환합니다.
예:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #선언된 모델
클래스 카테고리(ormar. 모델):
ormar_config = base_ormar_config (테이블 이름 = "카테고리")
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 40)
sort_order: int = ormar. 정수(nullable = 참)
클래스 포스트(ormar. 모델):
ormar_config = base_ormar_config 사본()
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 200)
카테고리: 옵션 [카테고리] = ormar. 외래 키(카테고리)
# 샘플 데이터
뉴스 = 대기 카테고리(이름 = "뉴스", sort_order = 0).저장()
대기 중인 게시물(이름 = "Ormar가 다시 공격합니다!", 카테고리 = 뉴스).저장()
대기 중 게시물(이름 = "아직 ormar를 사용하지 않는 이유는 무엇입니까?", 카테고리 = 뉴스).저장()
대기 중인 게시물(이름 = "이것 좀 봐, 지금 무료로", 카테고리 = 뉴스).저장()
|
우편 모델에 액세스하십시오.
| 게시물 = 대기 게시물.ts. ()
주장된 게시물 ==[
{"id": 1, "name": "Ormar strikes again!", "category": 1},
{"id": 2, "name": "Why don't you use ormar yet?", "category": 1},
{"id": 3, "name": "Check this out, ormar now for free", "category": 1},
]
|
관련 모델을 동시에 선택하려면 _lated 또는 prefetch_lated를 선택하십시오.
중첩 모델 열에 자율 모델의 전체 관계 경로(쿼리에 사용된 모델)가 접두사로 표시되는 방법을 확인하십시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | # 모델 선언
클래스 사용자(ormar. 모델):
ormar_config = base_ormar_config 사본()
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 100)
클래스 역할(ormar. 모델):
ormar_config = base_ormar_config 사본()
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 100)
사용자: 목록 [사용자] = ormar. 많은 사람 (사용자)
# 샘플 데이터
크리에이터 = 사용자를 기다립니다(이름 = "익명"). 저장()
관리자 = 역할을 기다립니다(이름 = "관리자").저장()
편집자 = 역할을 기다립니다(이름 = "편집자"). 저장()
크리에이터를 기다립니다. 캐릭터 추가 (admin)
크리에이터를 기다립니다. 캐릭터 추가(편집자)
|
역할이 있는 사용자 선택
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | 사용자 = 사용자를 기다립니다.ts._ ("역할"). 값()
# 중첩 접두사 참고: 롤러 사용자 및 역할
사용자 주장 == [
{
"Id": 1,
"이름": "익명",
"roleuser__id": 1,
"roleuser__ 역할": 1,
"roleuser__user": 1,
"__id": 1,
"__name": "admin",
},
{
"Id": 1,
"이름": "익명",
"roleuser__id": 2,
"roleuser__ 역할": 2,
"roleuser__user": 1,
"__id": 2,
" __name ": " 편집기 ",
},
]
|
!!!역할과 사용자 간의 관계는 다대다이므로 기본적으로 모델 열을 얻을 수도 있습니다.
관련 필드와 필드를 결합하여 3개의 필드만 선택합니다.
정의에 따르면 조인에 포함되어 있지만 필드에 참조가 없는 모든 모델이 완전히 선택된 것으로 가정되므로(모든 필드 포함) 모델별 정의도 제외했습니다.
!!!여기서 다른 쿼리 집합 접근 방식과 달리 중간 모델은 제외할 수 있지만 후행 열은 유지할 수 있으므로 원래 데이터 소스를 모델로 구문 분석할 때 의미가 없습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | 따라서 관계 범주 -> _x_post -> post -> 사용자는 제외할 수 있습니다.
카테고리_x_post 및 게시 모델이지만 사용자 모델을 유지할 수 있습니다.
모델을 통해 제외 및 게시하는 것처럼 불가능한 컨텍스트
범주 모델)에서 사용자 모델에 도달할 수 있는 방법은 없습니다.
사용자 = (
Role.ts._("user__")를 기다립니다.
. 필터(이름 = "admin")
. 필드({"이름": . .., "사용자": { "이름": . .., "카테고리":{"name"}})
제외 _ 필드("역할 사용자")
. 값()
)
사용자 주장 == [
{
"이름": "admin",
"user__name": "익명",
"사용자 __ __name": "뉴스",
}
]
|
쿼리에 여러 ManyToLong 모델이 있는 경우 각 모델을 수동으로 제외해야 합니다.
이 부담을 피하기 위해 ormar는 예외 _스루 = 거짓 매개 변수를 제공합니다. 이 플래그가 참으로 설정되면 모든 모델이 완전히 제외됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | # 위의 쿼리와 동일, _field 호출 부족 참고
사용자 = (
Role.ts._("user__")를 기다립니다.
. 필터(이름 = "admin")
. 필드({"이름": . .., "사용자": { "이름": . .., "카테고리":{"name"}})
. 값(제외 _ 통과 = 참)
)
사용자 주장 == [
{
"이름": "admin",
"user__name": "익명",
"사용자 __ __name": "뉴스",
}
]
|
가치 목록
values_list(fields: Union[List, str, Set, Dict] = None, flatten: bool = False, exclude_through: bool = False) -> List
데이터베이스에서 열 값을 나타내는 튜플 목록을 반환합니다.
필드 매개 변수를 사용하여 필드() 메서드와 동일한 매개 변수 집합을 허용하는 필드의 하위 집합을 선택할 수 있습니다.
필드를 값 _list(필드)로 전달하는 것은 실제로 필드(필드)를 호출하는 바로 가기입니다.
!!!필드에 전달할 수 있는 항목과 중첩 모델 필드를 선택하는 방법에 대해 자세히 알아보려면 열 선택 문서를 참조하십시오.
열/필드를 하나만 선택하면 플랫 = 트루를 전달할 수 있으며, 그러면 요소 튜플 목록 대신 값 목록이 반환됩니다.
!!!는 플랫 = True를 설정하면 여러 필드(또는 없음, 모든 필드를 의미)를 선택하면 QueryDefinitionError 예외가 발생합니다.
필터() 및 ()를 제외하고 조건을 제공하여 행 수를 제한할 수 있지만 하나의 행(또는 행이 없음!)만 기준을 충족하더라도 응답으로 목록을 반환합니다.
예:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #선언된 모델
클래스 카테고리(ormar. 모델):
ormar_config = base_ormar_config (테이블 이름 = "카테고리")
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 40)
sort_order: int = ormar. 정수(nullable = 참)
클래스 포스트(ormar. 모델):
ormar_config = base_ormar_config 사본()
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 200)
카테고리: 옵션 [카테고리] = ormar. 외래 키(카테고리)
# 샘플 데이터
뉴스 = 대기 카테고리(이름 = "뉴스", sort_order = 0).저장()
대기 중인 게시물(이름 = "Ormar가 다시 공격합니다!", 카테고리 = 뉴스).저장()
대기 중 게시물(이름 = "아직 ormar를 사용하지 않는 이유는 무엇입니까?", 카테고리 = 뉴스).저장()
대기 중인 게시물(이름 = "이것 좀 봐, 지금 무료로", 카테고리 = 뉴스).저장()
|
우편 모델에 액세스하십시오.
| 게시물 = 기다리다 게시물.ts.s_list ()
# 열이 ID, 이름 및 범주(fk)를 참조하는 방법 참고
주장된 게시물 ==[
(1, "Ormar가 다시 공격합니다!", 1),
(2, "아직 ormar를 사용하지 않는 이유는 무엇입니까?", 1),
(3, "이것 좀 봐, ormar now 무료", 1),
]
|
관련 모델을 동시에 선택하려면 _lated 또는 prefetch_lated를 선택하십시오.
관계를 복잡하게 만들고 이전에 언급한 범주 모델을 사용자 모델을 참조하도록 수정해 보겠습니다.
| 클래스 카테고리(ormar. 모델):
ormar_config = base_ormar_config (테이블 이름 = "카테고리")
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 40)
sort_order: int = ormar. 정수(nullable = 참)
# 아래 새 열
d_by: 옵션 [사용자] = ormar. ForeignKey(사용자, t_name = "카테고리")
|
이제 사용자 링크를 사용하여 샘플 데이터를 만듭니다.
| 크리에이터 = 사용자를 기다립니다(이름 = "익명"). 저장()
관리자 = 역할을 기다립니다(이름 = "관리자").저장()
편집자 = 역할을 기다립니다(이름 = "편집자"). 저장()
크리에이터를 기다립니다. 캐릭터 추가 (admin)
크리에이터를 기다립니다. 캐릭터 추가(편집자)
뉴스 = 대기 카테고리(이름 = "뉴스", sort_order = 0, create_by = creator).저장()
|
관련 필드와 필드를 결합하여 3개의 필드만 선택합니다.
정의에 따르면 조인에 포함되어 있지만 필드에 참조가 없는 모든 모델이 완전히 선택된 것으로 가정되므로(모든 필드 포함) 모델별 정의도 제외했습니다.
!!!여기서 다른 쿼리 집합 접근 방식과 달리 중간 모델은 제외할 수 있지만 후행 열은 유지할 수 있으므로 원래 데이터 소스를 모델로 구문 분석할 때 의미가 없습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | 따라서 관계 범주 -> _x_post -> post -> 사용자는 제외할 수 있습니다.
카테고리_x_post 및 게시 모델이지만 사용자 모델을 유지할 수 있습니다.
모델을 통해 제외 및 게시하는 것처럼 불가능한 컨텍스트
범주 모델)에서 사용자 모델에 도달할 수 있는 방법은 없습니다.
사용자 = (
Role.ts._("user__")를 기다립니다.
. 필터(이름 = "admin")
. 필드({"이름": . .., "사용자": { "이름": . .., "카테고리":{"name"}})
제외 _ 필드("역할 사용자")
. es_list ()
)
사용자 주장 == [("admin", "Annamous", "News")]
|
쿼리에 여러 ManyToLong 모델이 있는 경우 각 모델을 수동으로 제외해야 합니다.
이 부담을 피하기 위해 ormar는 예외 _스루 = 거짓 매개 변수를 제공합니다. 이 플래그가 참으로 설정되면 모든 모델이 완전히 제외됩니다.
| # 위의 쿼리와 동일, _field 호출 부족 참고
사용자 = (
Role.ts._("user__")를 기다립니다.
. 필터(이름 = "admin")
. 필드({"이름": . .., "사용자": { "이름": . .., "카테고리":{"name"}})
값 _ 목록 (제외 _ 통과 = 참)
)
사용자 주장 == [("admin", "Annamous", "News")]
|
플랫을 사용하여 값 목록을 가져옵니다.
| # 두 개 이상의 필드로 평탄화를 사용하면 예외가 발생합니다!
Role.ts.field({"name", "id"}).s_list(flatten = True)를 기다립니다.
# 적절한 사용법
역할 = Role.ts.field("이름")를 기다립니다. es_list (flatten = True)
역할 주장 == ["관리자", "편집자"]
|
QuerysetProxy 방법
관련 ManyTo많이 필드 및 ReverseForeignKey에 직접 액세스하면 관련 모델 목록이 반환됩니다.
그러나 쿼리 세트 API의 하위 집합도 표시되므로 상위 모델에서 직접 필터링, 생성, 관련 모델 선택 등을 할 수 있습니다.
!!!경고 값과 값을 사용하기 때문에 _list는 모델 구문 분석 및 유효성을 건너뜁니다. 이 두 가지 방법은 현재 로드된 관련 모델을 지우지 않으며 쿼리 설정 프록시의 다른 모든 읽기 방법과 비교하여 현재 로드된 모델을 자체 호출 결과로 덮어쓰지 않습니다!
값
위의 값 함수와 동일하지만 관계의 다른 끝에서 관련 개체를 검색할 수 있습니다.
!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.
가치 목록
위의 값_list 함수와 정확히 동일하지만 관계의 다른 쪽 끝에서 관련 개체를 쿼리하거나 만들 수 있습니다.
!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.