2022. 11. 17. 02:20ㆍ스파르타코딩(22.8.29~22.12.31)/TIL(Today I Learned)
- Today I Learned
- 이전에 하나의 DB모델을 만들기 위해 모델의 필드와 그 옵션에 대해 알아봤다.
이번엔 그 모델과 다른모델과의 관계성을 알아보려고 했는데,
내용이 많고 복잡해 1개의 모델에 연관성을 주는 Field와 옵션에 대해 먼저 알아보려고 한다!
필드 API 참조 ¶
클래스 Field ¶Field데이터베이스 테이블 열을 나타내는 추상 클래스입니다. Django는 필드를 사용하여 데이터베이스 테이블( db_type())을 생성하고 Python 유형을 데이터베이스에 매핑( get_prep_value())하거나 그 반대로 매핑합니다( from_db_value()).
따라서 필드는 다양한 Django API, 특히 models및 querysets.
모델에서 필드는 클래스 속성으로 인스턴스화되며 특정 테이블 열을 나타냅니다 . 모델 을 참조하십시오 . null여기에는 및 와 같은 속성과 uniqueDjango가 필드 값을 데이터베이스별 값에 매핑하는 데 사용하는 메서드가 있습니다.
A Field는 의 하위 클래스 RegisterLookupMixin이므로 s Transform에서 Lookup사용하도록 등록할 수 있습니다 QuerySet(예: field_name__exact="foo"). 모든 기본 제공 조회 는 기본적으로 등록됩니다.
와 같은 Django의 모든 내장 필드 CharField는 의 특정 구현입니다 Field. 사용자 지정 필드가 필요한 경우 기본 제공 필드의 하위 클래스를 만들거나 Field처음부터 작성할 수 있습니다. 두 경우 모두 사용자 정의 모델 필드를 만드는 방법을 참조하십시오 .
description¶응용 프로그램 과 같은 필드에 대한 자세한 설명입니다 django.contrib.admindocs.
설명은 다음 형식일 수 있습니다.
description = _("String (up to %(max_length)s)")
여기서 인수는 필드의 __dict__.
descriptor_class¶인스턴스화되고 모델 인스턴스 속성에 할당되는 디스크립터 프로토콜 을 구현하는 클래스 입니다. Field생성자는 인스턴스 라는 단일 인수를 수락해야 합니다 . 이 클래스 특성을 재정의하면 가져오기 및 설정 동작을 사용자 지정할 수 있습니다.
Django는 a를 데이터베이스 특정 유형에 매핑하기 Field위해 다음과 같은 여러 메서드를 노출합니다.
get_internal_type() ¶백엔드 특정 목적을 위해 이 필드의 이름을 지정하는 문자열을 반환합니다. 기본적으로 클래스 이름을 반환합니다.
사용자 정의 필드에서 사용할 내장 필드 유형 에뮬레이션을 참조하십시오 .
db_type( 연결 ) ¶Field를 고려하여 에 대한 데이터베이스 열 데이터 유형을 반환합니다 connection.
사용자 정의 필드에서 사용하기 위한 사용자 정의 데이터베이스 유형 을 참조하십시오 .
rel_db_type( 연결 ) ¶를 고려하여 ForeignKey 및 OneToOneField을 가리키는 필드에 대한 데이터베이스 열 데이터 유형을 반환합니다 .Fieldconnection
사용자 정의 필드에서 사용하기 위한 사용자 정의 데이터베이스 유형 을 참조하십시오 .
Django가 데이터베이스 백엔드 및 필드와 상호 작용해야 하는 세 가지 주요 상황이 있습니다.
- 데이터베이스를 쿼리할 때(Python 값 -> 데이터베이스 백엔드 값)
- 데이터베이스에서 데이터를 로드할 때(데이터베이스 백엔드 값 -> Python 값)
- 데이터베이스에 저장할 때(Python 값 -> 데이터베이스 백엔드 값)
쿼리할 때 get_db_prep_value()및 get_prep_value()사용:
get_prep_value( 값 ) ¶value모델 속성의 현재 값이며 메서드는 쿼리에서 매개 변수로 사용하기 위해 준비된 형식으로 데이터를 반환해야 합니다.
사용법은 Python 개체를 쿼리 값으로 변환을 참조하세요 .
get_db_prep_value( 값 , 연결 , 준비 됨 = False ) ¶value백엔드별 값으로 변환 합니다. 기본적으로 valueif prepared=True및 get_prep_value()if is 를 반환합니다 False.
사용을 위해 조회 값을 데이터베이스 값으로 변환을 참조하십시오 .
데이터를 로드할 때 from_db_value()다음이 사용됩니다.
from_db_value( 값 , 표현식 , 연결 ) ¶데이터베이스에서 반환된 값을 Python 개체로 변환합니다. 의 반대입니다 get_prep_value().
이 방법은 데이터베이스 백엔드가 이미 올바른 Python 유형을 반환하거나 백엔드 자체가 변환을 수행하므로 대부분의 내장 필드에는 사용되지 않습니다.
expression와 동일합니다 self.
사용을 위해 값을 Python 객체로 변환을 참조하세요 .
메모
성능상의 이유로 from_db_value필요하지 않은 필드(모든 Django 필드)에서는 no-op로 구현되지 않습니다. 결과적으로 super정의를 호출할 수 없습니다.
저장할 때 pre_save()및 get_db_prep_save()사용:
get_db_prep_save( 값 , 연결 ) ¶와 동일 get_db_prep_value()하지만 필드 값 을 데이터베이스에 저장 해야 할 때 호출됩니다. 기본적으로 를 반환합니다 get_db_prep_value().
pre_save( model_instance , 추가 ) ¶저장되기 전에 값을 준비하기 위해 이전에 호출된 메서드 get_db_prep_save()(예: for DateField.auto_now).
model_instance이 필드가 속한 add 인스턴스이며 인스턴스가 처음으로 데이터베이스에 저장되는지 여부입니다.
model_instance이 필드에 대해 적절한 속성 값을 반환해야 합니다. 속성 이름은 에 있습니다 self.attname( 에 의해 설정됨 Field).
사용을 위해 저장하기 전에 값 전처리를 참조하세요 .
필드는 종종 직렬화 또는 양식에서 다른 유형으로 값을 수신합니다.
to_python( 값 ) ¶값을 올바른 Python 객체로 변환합니다. 의 반대 역할을 value_to_string()하며 in 이라고도 clean()합니다.
사용을 위해 값을 Python 객체로 변환을 참조하세요 .
데이터베이스에 저장하는 것 외에도 필드는 값을 직렬화하는 방법도 알아야 합니다.
value_from_object( 객체 ) ¶주어진 모델 인스턴스에 대한 필드 값을 반환합니다.
이 방법은 에서 자주 사용합니다 value_to_string().
value_to_string( 객체 ) ¶obj문자열로 변환 합니다. 필드 값을 직렬화하는 데 사용됩니다.
사용법 은 직렬화를 위한 필드 데이터 변환을 참조하십시오 .
를 사용할 때 다음과 같이 표시되어야 하는 양식 필드를 알아야 합니다.model formsField
formfield( form_class = 없음 , choice_form_class = 없음 , ** kwargs ) ¶django.forms.Field에 대한 이 필드 의 기본값을 반환합니다 ModelForm.
기본적으로 form_class및 choices_form_class가 모두 인 경우 None를 사용합니다 CharField. 필드가 choices있고 choices_form_class 지정되지 않은 경우 를 사용합니다 TypedChoiceField.
사용 을 위해 모델 필드에 대한 양식 필드 지정을 참조하십시오 .
deconstruct() ¶필드를 재생성하기에 충분한 정보가 포함된 4-튜플을 반환합니다.
- 모델의 필드 이름입니다.
- 필드의 가져오기 경로(예: "django.db.models.IntegerField"). 이것은 가장 휴대하기 쉬운 버전이어야 하므로 덜 구체적일 수도 있습니다.
- 위치 인수 목록입니다.
- 키워드 인수의 사전입니다.
마이그레이션을 사용하여 데이터를 마이그레이션 하려면 이 방법을 1.7 이전의 필드에 추가해야 합니다 .
조회 등록 및 가져오기 ¶
Field조회 등록 API를 구현합니다 . API를 사용하여 필드 클래스에 사용할 수 있는 조회와 필드에서 조회를 가져오는 방법을 사용자 정의할 수 있습니다.
필드 속성 참조 ¶
모든 Field인스턴스에는 해당 동작을 검사할 수 있는 여러 특성이 포함되어 있습니다. isinstance 필드의 기능에 의존하는 코드를 작성해야 하는 경우 검사 대신 이러한 속성을 사용하십시오 . 이러한 속성은 Model._meta API 와 함께 사용하여 특정 필드 유형에 대한 검색 범위를 좁힐 수 있습니다. 사용자 정의 모델 필드는 이러한 플래그를 구현해야 합니다.
필드 속성 ¶
Field.auto_created¶OneToOneField모델 상속 에서 사용되는 것과 같이 필드가 자동으로 생성되었는지 여부를 나타내는 부울 플래그입니다 .
Field.concrete¶필드에 연결된 데이터베이스 열이 있는지 여부를 나타내는 부울 플래그입니다.
Field.hidden¶필드가 숨겨지지 않은 다른 필드의 기능을 지원하는 데 사용되는지 여부를 나타내는 부울 플래그(예: 를 구성하는 content_type및 object_id필드 GenericForeignKey). hidden플래그는 모델에 있는 모든 필드에서 모델에 있는 필드의 공용 하위 집합을 구성하는 항목을 구별하는 데 사용됩니다 .
메모
Options.get_fields() 기본적으로 숨겨진 필드를 제외합니다. include_hidden=True결과에 숨겨진 필드를 반환하려면 전달하십시오 .
ForeignKey필드가 해당 기능(예: , ManyToManyField, OneToOneField등) 에 대한 하나 이상의 다른 모델에 대한 참조를 포함하는지 여부를 나타내는 부울 플래그입니다 .
Field.model¶필드가 정의된 모델을 반환합니다. 필드가 모델의 슈퍼클래스에 정의된 경우 model인스턴스의 클래스가 아닌 슈퍼클래스를 참조합니다.
관계가 있는 필드의 속성 ¶
이러한 특성은 관계의 카디널리티 및 기타 세부 정보를 쿼리하는 데 사용됩니다. 이러한 속성은 모든 필드에 있습니다. None그러나 필드가 관계 유형( )인 경우 에는 부울 값만 갖습니다 Field.is_relation=True.
Field.many_to_many¶True필드에 다대다 관계가 있는 경우의 부울 플래그입니다 . False그렇지 않으면. Django에 포함된 유일한 필드는 True입니다 ManyToManyField.
Field.many_to_one¶True필드에 a와 같은 다대일 관계가 있는 경우 부울 플래그입니다 ForeignKey. False그렇지 않으면.
Field.one_to_many¶True필드가 일대다 관계(예: a GenericRelation또는 a 의 반대)인 경우 부울 플래그입니다 ForeignKey. False 그렇지 않으면.
Field.one_to_one¶True필드가 일대일 관계인 경우 부울 플래그 (예: OneToOneField; False그렇지 않으면.
Field.related_model¶필드와 관련된 모델을 가리킵니다. 예를 Author들어 . for a 는 항상 입니다.ForeignKey(Author, on_delete=models.CASCADE)related_modelGenericForeignKeyNone
'스파르타코딩(22.8.29~22.12.31) > TIL(Today I Learned)' 카테고리의 다른 글
[TIL] Cookie VS Session, 웹 스토리지 22/11/17 14일차 (0) | 2022.11.27 |
---|---|
[TIL] REST / REST API / RESTful이란? 22/11/16 13일차 (0) | 2022.11.25 |
[TIL] Model Types형 Field와 속성에 대해 22/11/14 11일차 (0) | 2022.11.16 |
[TIL] Django (User)모델과 Project Start Tutorial 11/11 10일차 (0) | 2022.11.14 |
[TIL] django.db.models.Model에 관하여 11/10 9일차 (0) | 2022.11.13 |