유형 및 속성 클래스

참고: 새로운 애플리케이션을 빌드하는 개발자는 NDB 클라이언트 라이브러리를 사용하는 것이 좋습니다. NDB 클라이언트 라이브러리는 이 클라이언트 라이브러리와 비교할 때 Memcache API를 통한 자동 항목 캐싱과 같은 여러 이점이 있습니다. 현재 이전 DB 클라이언트 라이브러리를 사용 중인 경우 DB에서 NDB로의 마이그레이션 가이드를 참조하세요.

App Engine Datastore는 데이터 항목의 속성에서 고정된 값 유형 집합을 지원합니다. Property 클래스는 기본값 유형과 변환되는 새 유형을 정의할 수 있으며 값 유형을 Expando 동적 속성과 ListProperty 집계 속성 모델에서 직접 사용할 수 있습니다.

다음 표에서는 값이 기본 데이터 유형과 직접 대응하는 Property 클래스를 설명합니다. 이러한 값 유형을 Expando 동적 속성 또는 ListProperty 집계 유형에서 사용할 수 있습니다.

Property 클래스 값 유형 정렬 순서
IntegerProperty int
long (64비트)
숫자
FloatProperty float 숫자
BooleanProperty bool False < True
StringProperty str
unicode
유니코드(str은 ASCII로 취급됨)
TextProperty db.Text 없음
ByteStringProperty ByteString
바이트순
BlobProperty db.Blob 없음
DateProperty
TimeProperty
DateTimeProperty
datetime.date
datetime.time
datetime.datetime
시간순
GeoPtProperty db.GeoPt 위도순 우선 적용
후 경도순
PostalAddressProperty db.PostalAddress 유니코드
PhoneNumberProperty db.PhoneNumber 유니코드
EmailProperty db.Email 유니코드
UserProperty users.User 이메일 주소
(유니코드 순서). UserProperty 클래스 설명 아래의 참고에 따라 UserProperty를 사용하지 말아야 합니다.
IMProperty db.IM 유니코드
LinkProperty db.Link 유니코드
CategoryProperty db.Category 유니코드
RatingProperty db.Rating 숫자
ReferenceProperty
SelfReferenceProperty
db.Key 경로 요소 기준
(종류, 식별자,
종류, 식별자...)
blobstore.BlobReferenceProperty blobstore.BlobInfo 바이트순
ListProperty
StringListProperty
지원되는 유형의 list 오름차순은 최소 요소 기준,
내림차순은 최대 요소 기준

데이터 저장소 값 유형

Datastore 항목 속성 값은 다음 유형 중 하나입니다. Model 정의와 함께 사용할 해당 Property 클래스의 목록은 위 내용을 참조하세요.

Python 표준 유형과 users.User를 제외하고 이 섹션에서 설명하는 모든 클래스는 google.appengine.ext.db 모듈에서 제공됩니다.

str 또는 unicode

짧은 문자열(1,500바이트 이하)

str 값은 ascii 코덱으로 인코딩된 텍스트로 간주되며 저장되기 전에 unicode 값으로 변환됩니다. 이 값은 Datastore에서 unicode 값으로 반환됩니다. 다른 코덱을 사용하는 짧은 문자열의 경우 unicode 값을 사용합니다.

short 문자열은 데이터 저장소에 의해 색인이 생성되며 필터 및 정렬 순서에서 사용 가능합니다. 길이가 1,500바이트를 초과하는 텍스트 문자열(색인이 생성되지 않음)에는 Text 인스턴스를 사용합니다. 1,500바이트를 초과하는 인코딩되지 않은 바이트 문자열(색인이 생성되지 않음)에는 Blob 인스턴스를 사용합니다. 색인을 생성해야 하며 텍스트가 아니고 인코딩되지 않은 최대 1,500바이트의 바이트 문자열(문자가 아님)에는 ByteString 인스턴스를 사용합니다.

모델 속성: StringProperty

bool

부울 값(True 또는 False)

모델 속성: BooleanProperty

int 또는 long

정수 값(최대 64비트)

Python int 값은 저장 전에 Python long 값으로 변환됩니다. int로 저장된 값은 long으로 반환됩니다.

64비트를 초과하는 long이 할당되면 최하위 64비트만 저장됩니다.

모델 속성: IntegerProperty

float

부동 소수점 수

모델 속성: FloatProperty

datetime.datetime

날짜 및 시간. datetime 모듈 문서를 참조하세요.

datetime 값에 tzinfo 속성이 있으면 저장 시 UTC 시간대로 변환됩니다. Datastore에서 반환되는 값은 UTC이며 tzinfoNone입니다. 날짜 및 시간 값이 특정 시간대여야 하는 애플리케이션은 값을 업데이트할 때 tzinfo를 정확히 설정하고 값에 액세스할 때 값을 이 시간대로 변환해야 합니다.

일부 라이브러리는 TZ 환경 변수를 사용하여 날짜-시간 값에 적용되는 시간대를 제어합니다. App Engine은 이 환경 변수를 "UTC"로 설정합니다. Python 코드 외부에서는 환경 변수의 변경사항이 표시되지 않으므로 애플리케이션에서 이 변수를 변경해도 일부 날짜/시간 함수의 동작은 변경되지 않습니다.

특정 시간대로만 그리고 특정 시간대로부터만 값을 변환하는 경우 커스텀 datetime.tzinfo를 구현하여 Datastore에서 값을 변환할 수 있습니다.

import datetime
import time

class Pacific_tzinfo(datetime.tzinfo):
    """Implementation of the Pacific timezone."""
    def utcoffset(self, dt):
        return datetime.timedelta(hours=-8) + self.dst(dt)

    def _FirstSunday(self, dt):
        """First Sunday on or after dt."""
        return dt + datetime.timedelta(days=(6-dt.weekday()))

    def dst(self, dt):
        # 2 am on the second Sunday in March
        dst_start = self._FirstSunday(datetime.datetime(dt.year, 3, 8, 2))
        # 1 am on the first Sunday in November
        dst_end = self._FirstSunday(datetime.datetime(dt.year, 11, 1, 1))

        if dst_start <= dt.replace(tzinfo=None) < dst_end:
            return datetime.timedelta(hours=1)
        else:
            return datetime.timedelta(hours=0)
    def tzname(self, dt):
        if self.dst(dt) == datetime.timedelta(hours=0):
            return "PST"
        else:
            return "PDT"

pacific_time = datetime.datetime.fromtimestamp(time.mktime(utc_time.timetuple()), Pacific_tzinfo())

datetime 모듈 문서(datetime.tzinfo 포함)를 참조하세요. 타사 모듈 pytz도 참조하세요. 단, pytz 배포에는 파일이 많습니다.

DateTimeProperty 모델 속성 클래스에는 모델 인스턴스가 저장된 날짜와 시간을 자동으로 사용하는 기능과 같은 기능이 포함됩니다. 이는 모델의 기능이며 원시 Datastore 값(예: Expando 동적 속성)에서는 사용될 수 없습니다.

모델 속성: DateTimeProperty, DateProperty, TimeProperty

list

지원되는 데이터 유형으로 구성된 값 목록입니다.

listExpando 동적 속성의 값으로 사용될 경우 빈 목록일 수 없습니다. 목록 값이 저장되는 방식 때문입니다. 목록 속성에 항목이 없는 경우 데이터 저장소에 표현이 없습니다. 정적 속성과 ListProperty 클래스를 사용하여 속성의 빈 목록 값을 표현할 수 있습니다.

모델 속성: ListProperty

db.Key

다른 데이터 저장소 항목의 키.

참고: 키 문자열은 1,500바이트 이하로 제한됩니다.

m = Employee(name="Susan", key_name="susan5")
m.put()
e = Employee(name="Bob", manager=m.key())
e.put()

m_key = db.Key.from_path("Employee", "susan5")
e = Employee(name="Jennifer", manager=m_key)

모델 속성: ReferenceProperty, SelfReferenceProperty

blobstore.BlobKey

Blobstore 값의 키로 값이 업로드될 때 Blobstore에서 생성됩니다.

모델 속성: blobstore.BlobReferenceProperty

users.User

Google 계정이 있는 사용자

사용자가 자신의 이메일 주소를 변경해도 Datastore에 있는 user.User 값은 업데이트되지 않습니다. 따라서 고유 ID와 함께 이메일 주소를 포함하는 users.UserUserProperty 값으로 저장하지 않는 것이 좋습니다. 사용자가 이메일 주소를 변경한 경우 이전에 저장한 user.User 값과 새 user.User 값을 비교하면 서로 일치하지 않게 됩니다. 대신 user.User 값의 user_id()를 사용자의 안정적인 고유 식별자로 사용합니다.

모델 속성: UserProperty

class Blob(arg=None)

바이트 문자열로 된 바이너리 데이터. 기본 제공 str 유형의 서브클래스입니다.

Blob 속성의 색인이 생성되지 않으므로 이 속성을 필터 또는 정렬 순서에서 사용할 수 없습니다.

Blob은 이미지와 같은 바이너리 데이터용입니다. str 값을 취하지만 이 값은 바이트 문자열로 저장되며 텍스트로 인코딩되지 않습니다. 대용량 텍스트 데이터에는 Text 인스턴스를 사용합니다.

모델 속성: BlobProperty

class MyModel(db.Model):
    blob = db.BlobProperty()

m = MyModel()
m.blob = db.Blob(open("image.png", "rb").read())

XML에서 blob은 바이너리 데이터 포함 여부에 관계없이 base-64로 인코딩됩니다.

class ByteString(arg)

1,500바이트 이하의 짧은 blob 값('바이트 문자열') ByteString은 str의 서브클래스이며 인코딩되지 않은 str 값을 생성자의 인수로 받습니다.

ByteString은 Datastore에 의해 색인이 생성되며, 필터 및 정렬 순서에 사용할 수 있습니다. 길이가 1,500바이트를 초과하는 바이트 문자열(색인이 생성되지 않음)에는 Blob 인스턴스를 사용합니다. 인코딩된 텍스트 데이터에는 str(짧은 경우, 색인이 생성됨) 또는 Text(긴 경우, 색인이 생성되지 않음)를 사용합니다.

모델 속성: ByteStringProperty

class Text(arg=None, encoding=None)

긴 문자열. 기본 제공 unicode 유형의 서브클래스입니다.

arg unicode 또는 str 값. argstr이면 encoding으로 지정된 인코딩을 사용하여 파싱되고 인코딩이 지정되지 않은 경우 ascii를 사용하여 파싱됩니다. encoding에 사용 가능한 값은 Standard Encodings 목록을 참조하세요.

값이 단순한 str 또는 unicode인 항목 속성과 달리 Text 속성의 길이는 1,500바이트를 초과할 수 있습니다. 그러나 Text 속성은 색인이 생성되지 않으며 필터 또는 정렬 순서에 사용할 수 없습니다.

모델 속성: TextProperty

class MyModel(db.Model):
    text = db.TextProperty()

m = MyModel()
m.text = db.Text(u"kittens")

m.text = db.Text("kittens", encoding="latin-1")
class Category(tag)

카테고리 또는 'tag'. 기본 제공 unicode 유형의 서브클래스입니다.

모델 속성: CategoryProperty

class MyModel(db.Model):
    category = db.CategoryProperty()

m = MyModel()
m.category = db.Category("kittens")

XML에서 Atom Category 요소입니다.

class Email(email)

이메일 주소. 기본 제공 unicode 유형의 서브클래스입니다.

속성 클래스와 값 클래스 모두 이메일 주소의 유효성 검사를 수행하지 않고 단순히 값을 저장하기만 합니다.

모델 속성: EmailProperty

class MyModel(db.Model):
    email_address = db.EmailProperty()

m = MyModel()
m.email_address = db.Email("larry@example.com")

XML에서 gd:email 요소입니다.

class GeoPt(lat, lon=None)

부동 소수점 위도 및 경도 좌표로 표현되는 지리적 지점

모델 속성: GeoPtProperty

XML에서 georss:point 요소입니다.

class IM(protocol, address=None)

채팅 핸들

protocol은 채팅 메시지 서비스의 표준 URL입니다. 가능한 값 중 일부는 다음과 같습니다.

프로토콜설명
sipSIP/SIMPLE
xmppXMPP/Jabber
http://aim.com/AIM
http://icq.com/ICQ
http://messenger.msn.com/MSN Messenger
http://messenger.yahoo.com/Yahoo Messenger
http://sametime.com/Lotus Sametime
http://gadu-gadu.pl/Gadu-Gadu
unknown알 수 없거나 지정되지 않음

address는 핸들의 주소입니다.

모델 속성: IMProperty

class MyModel(db.Model):
    im = db.IMProperty()

m = MyModel()
m.im = db.IM("http://example.com/", "Larry97")

XML에서 gd:im 요소입니다.

정규화된 URL. 기본 제공 unicode 유형의 서브클래스입니다.

모델 속성: LinkProperty

class MyModel(db.Model):
    link = db.LinkProperty()

m = MyModel()
m.link = db.Link("http://www.google.com/")

XML에서 Atom Link 요소입니다.

class PhoneNumber(phone)

사람이 읽을 수 있는 전화번호. 기본 제공 unicode 유형의 서브클래스입니다.

모델 속성: PhoneNumberProperty

class MyModel(db.Model):
    phone = db.PhoneNumberProperty()

m = MyModel()
m.phone = db.PhoneNumber("1 (206) 555-1212")

XML에서 gd.phoneNumber 요소입니다.

class PostalAddress(address)

우편 주소. 기본 제공 unicode 유형의 서브클래스입니다.

모델 속성: PostalAddressProperty

class MyModel(db.Model):
    address = db.PostalAddressProperty()

m = MyModel()
m.address = db.PostalAddress("1600 Ampitheater Pkwy., Mountain View, CA")

XML에서 gd:postalAddress 요소입니다.

class Rating(rating)

사용자가 제공한 콘텐츠 평점(0~100 사이의 정수). 기본 제공 long 유형의 서브클래스입니다. 이 클래스는 값이 0~100 사이의 정수인지 확인하고 값이 유효하지 않으면 BadValueError가 발생합니다.

모델 속성: RatingProperty

class MyModel(db.Model):
    rating = db.RatingProperty()

m = MyModel()
m.rating = db.Rating(97)

XML에서 gd:rating 요소입니다.

속성 클래스

google.appengine.ext.db에서 제공하는 모든 모델 속성 클래스는 기본 클래스 Property의 서브클래스이며 기본 생성자의 모든 인수를 지원합니다. 이러한 인수는 기본 클래스 문서를 참조하세요.

google.appengine.ext.db 패키지는 다음과 같은 모델 속성 클래스를 제공합니다.

class BlobProperty(...)

해석되지 않은 바이너리 데이터 컬렉션.

blob 데이터는 바이트 문자열입니다. 인코딩이 수반될 수 있는 텍스트 데이터에는 TextProperty를 사용합니다.

값 유형: Blob

class BooleanProperty(...)

부울 값(True 또는 False)

값 유형: bool

class ByteStringProperty(verbose_name=None, ...)

1,500바이트 이하의 짧은 blob 값('바이트 문자열')

ByteStringProperty 값의 색인이 생성되므로 이 값을 필터 및 정렬 순서에 사용할 수 있습니다.

값이 어떤 식으로도 인코딩되지 않는다는 점을 제외하면 StringProperty와 비슷합니다. 바이트는 문자 그대로 정렬됩니다.

ByteStringProperty가 필요한 경우 값은 빈 문자열이 될 수 없습니다.

값 유형: ByteString

class CategoryProperty(...)

'태그' 카테고리, 설명하는 단어 또는 문구.

값 유형: Category

class DateProperty(verbose_name=None, auto_now=False, auto_now_add=False, ...)

시간이 포함되지 않은 날짜. 자세한 내용은 DateTimeProperty를 참조하세요.

값 유형: datetime.date. 내부적으로 datetime.datetime으로 변환됨

class DateTimeProperty(verbose_name=None, auto_now=False, auto_now_add=False, ...)

날짜 및 시간.

auto_nowTrue이면 모델 인스턴스가 Datastore에 저장될 때마다 속성 값이 현재 시간으로 설정되어 속성의 이전 값을 덮어씁니다. 모델 인스턴스의 '최근 수정' 날짜 및 시간을 추적하는 데 유용합니다.

auto_now_addTrue이면 속성에 이미 값이 할당된 경우를 제외하고 모델 인스턴스가 처음 Datastore에 저장될 때 속성 값이 현재 시간으로 설정됩니다. 모델 인스턴스의 '만든' 날짜 및 시간을 저장하는 데 유용합니다.

날짜/시간 값은 UTC 시간대로 저장되며 이 시간대를 통해 반환됩니다. 시간대 관리 방법은 datetime.datetime을 참조하세요.

값 유형: datetime.datetime

class EmailProperty(...)

이메일 주소.

속성 클래스와 값 클래스 모두 이메일 주소의 유효성 검사를 수행하지 않고 단순히 값을 저장하기만 합니다.

값 유형: Email

class FloatProperty(...)

부동 소수점 수

값 유형: float

class GeoPtProperty(...)

부동 소수점 위도 및 경도 좌표로 표현되는 지리적 지점

값 유형: GeoPt

class IMProperty(...)

채팅 핸들

값 유형: IM

class IntegerProperty(...)

정수 값(최대 64비트)

Python int 값은 저장 전에 Python long 값으로 변환됩니다. int로 저장된 값은 long으로 반환됩니다.

64비트를 초과하는 long이 할당되면 최하위 64비트만 저장됩니다.

값 유형: int 또는 long

class LinkProperty(...)

정규화된 URL.

값 유형: Link

class ListProperty(item_type, verbose_name=None, default=None, ...)

item_type으로 지정된 유형의 값 목록

쿼리에서 목록 속성을 값에 비교하면 목록의 구성원을 대상으로 테스트가 수행됩니다. list_property = value는 값이 목록에 나타나는지 여부를 테스트하고 list_property < value는 목록 구성원 중에서 지정된 값보다 작은 구성원이 있는지 여부를 테스트하는 식입니다.

쿼리는 목록 값 두 개를 비교할 수 없습니다. 각 요소에서 멤버십을 개별적으로 테스트하지 않고는 두 목록의 동일함을 테스트할 방법이 없습니다.

item_type은 목록 항목의 유형으로, Python 유형 또는 클래스입니다. 목록 값의 모든 항목에는 유형이 지정되어야 합니다. item_typeDatastore 값 유형 중 하나여야 하며 list가 될 수 없습니다.

ListProperty의 값은 None일 수 없습니다. 하지만 빈 목록이 될 수 있습니다. Nonedefault 인수에 지정되는 경우(또는 default 인수가 지정되지 않는 경우) 속성의 기본값은 빈 목록입니다.

팁: ListProperty 집계 유형은 Property 클래스를 사용하지 않으므로 자동 값 및 유효성 검사와 같은 Property 클래스 기능은 목록 값의 구성원에 자동으로 적용되지 않습니다. Property 클래스를 사용하여 구성원 값의 유효성을 검사하려면 이 클래스를 인스턴스화하고 값에 validate() 메서드를 호출합니다.

default는 목록 속성의 기본값입니다. None인 경우 기본값은 빈 목록입니다. 목록 속성은 커스텀 검사기를 정의하여 빈 목록을 금지할 수 있습니다.

목록 속성 및 값에 대한 자세한 내용은 데이터 모델링 페이지를 참조하세요.

값 유형: 지정된 유형으로 된 값의 Python list

class PhoneNumberProperty(...)

사람이 읽을 수 있는 전화번호.

값 유형: PhoneNumber

class PostalAddressProperty(...)

우편 주소.

값 유형: PostalAddress

class RatingProperty()

사용자가 제공한 콘텐츠 평점(0~100 사이의 정수).

값 유형: Rating

class ReferenceProperty(reference_class=None, verbose_name=None, collection_name=None, ...)

다른 모델 인스턴스에 대한 참조. 예를 들어 참조는 속성이 있는 모델과 속성에 의해 참조되는 모델 간의 다대일 관계를 나타낼 수 있습니다.

reference_class는 참조되는 모델 인스턴스의 모델 클래스입니다. 지정되면 클래스의 모델 인스턴스만 이 속성에 할당될 수 있습니다. None인 경우 모든 모델 인스턴스가 이 속성의 값이 될 수 있습니다.

collection_name은 참조되는 모델 클래스에 제공할 속성의 이름입니다. 속성 값은 항목을 참조하는 모든 항목의 Query입니다. collection_name이 설정되지 않으면 modelname_set(소문자로 된 참조되는 모델의 이름 뒤에 _set가 추가됨)이 사용됩니다.

참고: 같은 모델 클래스를 참조하는 동일한 모델 내에 속성이 여러 개 있으면 collection_name을 설정해야 합니다. 그렇지 않으면 기본 이름이 생성될 때 DuplicatePropertyError가 발생합니다.

ReferenceProperty는 모델 인스턴스를 속성 값으로 자동으로 참조 및 역참조합니다. 모델 인스턴스는 참조 속성에 직접 할당될 수 있으며 키가 사용됩니다. ReferenceProperty 값은 모델 인스턴스와 마찬가지 방식으로 사용될 수 있으며 이 방식으로 처음 사용될 때 Datastore 항목을 가져오고 모델 인스턴스가 생성됩니다. 영향을 받지 않는 참조 속성은 불필요한 데이터를 쿼리하지 않습니다.

class Author(db.Model):
    name = db.StringProperty()

class Story(db.Model):
    author = db.ReferenceProperty(Author)

story = db.get(story_key)
author_name = story.author.name

author = db.get(author_key)
stories_by_author = author.story_set.get()

Key 값과 마찬가지로 참조 속성 값이 존재하지 않는 데이터 항목을 참조할 가능성이 있습니다. 참조되는 항목이 Datastore에서 삭제되면 이 항목의 참조는 업데이트되지 않습니다. 존재하지 않는 항목에 액세스하면 ReferencePropertyResolveError가 발생합니다.

항목을 삭제해도 참조 속성에 의해 참조되는 항목은 삭제되지 않습니다.

값 유형: db.Key

class SelfReferenceProperty(verbose_name=None, collection_name=None, ...)

같은 클래스의 다른 모델 인스턴스에 대한 참조(ReferenceProperty 참조).

값 유형: db.Key

class StringListProperty(verbose_name=None, default=None, ...)

Python str 또는 unicode(basestring) 값의 목록 속성과 유사합니다.

값 유형: str 또는 unicode 값의 Python list

class StringProperty(verbose_name=None, multiline=False, ...)

짧은 문자열. 1,500바이트 이하의 Python str 또는 unicode(basestring) 값을 취합니다.

StringProperty 값의 색인이 생성되므로 이 값을 필터 및 정렬 순서에 사용할 수 있습니다.

multilineFalse이면 값은 라인피드 문자를 포함할 수 없습니다. djangoforms 라이브러리는 이를 사용하여 데이터 모델에서 텍스트 필드와 텍스트 영역 필드 간의 차이점을 구현합니다. 다른 곳에서도 이 라이브러리를 비슷한 용도로 사용할 수 있습니다.

문자열 속성이 필요한 경우 값은 빈 문자열이 될 수 없습니다.

값 유형: str 또는 unicode

class TextProperty()

긴 문자열.

StringProperty와 달리 TextProperty 값은 길이가 1,500바이트를 초과할 수 있습니다. 그러나 TextProperty 값의 색인이 생성되지 않으므로 이 값을 필터 또는 정렬 순서에 사용할 수 없습니다.

TextProperty 값은 텍스트를 텍스트 인코딩과 함께 저장합니다. 바이너리 데이터의 경우 BlobProperty를 사용합니다.

텍스트 속성이 필요한 경우 값은 빈 문자열이 될 수 없습니다.

값 유형: Text

class TimeProperty(verbose_name=None, auto_now=False, auto_now_add=False, ...)

날짜 없는 시간. Python 표준 라이브러리 datetime.time 값을 사용합니다. 자세한 내용은 DateTimeProperty를 참조하세요.

값 유형: datetime.time. 내부적으로 datetime.datetime으로 변환됨

class UserProperty(verbose_name=None, auto_current_user=False, auto_current_user_add=False, ...)

중요: UserProperty에는 이메일 주소와 사용자의 고유 ID가 포함되어 있으므로 이를 저장하지 않는 것이 좋습니다. 사용자가 자신의 이메일 주소를 변경하고 이전에 저장한 User 값과 새 User 값을 비교하면 서로 일치하지 않게 됩니다.

Google 계정이 있는 사용자

auto_current_userTrue이면 모델 인스턴스가 Datastore에 저장될 때마다 속성 값은 현재 로그인한 사용자로 설정되어 속성의 이전 값을 덮어씁니다. 모델 인스턴스를 수정하는 사용자를 추적하는 데 유용합니다.

auto_current_user_addTrue이면 속성에 이미 값이 할당된 경우를 제외하고 모델 인스턴스가 Datastore에 처음 저장될 때 속성 값이 현재 로그인한 사용자로 설정됩니다. 모델 인스턴스를 만드는 사용자를 추적하는 데 유용합니다. 모델 인스턴스를 만드는 사용자는 나중에 이를 수정하는 사용자와 다를 수 있습니다.

UserProperty는 기본값을 받지 않습니다. 기본값은 모델 클래스를 처음 가져올 때 설정되며 가져오기 캐시 사용 시 현재 로그인한 사용자가 아닐 수 있습니다.

값 유형: users.User