2016-10-14 2 views
1

Django와 DRF를 사용하여 나머지 API를 만들고 있습니다. 내가이 예처럼 설정에 내 모델을 시도하고 그래서 클라이언트에 직접 ID를 노출하고 싶지 않은 :Django와 uuid가 데이터베이스에서 생성

class AbstractGuidModel(models.Model): 
    uuid = models.UUIDField(blank=True, default=uuid.uuid4, unique=True, editable=False) 

    class Meta: 
     abstract = True 

class MyModel(AbstractGuidModel): 
    name = models.CharField(max_length=NAME_LENGTH) 

AbstractGuidModel부터하는 것은 uuid.uuid4, UUID는 파이썬 코드에 의해 생성되는 = 기본 설정되어 있습니다 그리고 마이 그 레이션은 다음과 같습니다 :

CREATE TABLE "MyModel" (... "uuid" uuid NOT NULL UNIQUE, ...); 

나는 읽었습니다. 자동으로 uuids를 생성하는 확장 기능이 있습니다.

일단 확장 기능이 설치되면 데이터베이스에서 자신의 확장자를 사용하고 Python Uuid 모듈로 데이터베이스를 생성하지 못하게하려면 어떻게해야합니까?

답변

0

Django에서 기본 키로 UUIDField를 사용하면 UUID가 생성되지 않으므로 개체를 저장하기 전에 생성해야합니다. 귀하의 코드는 그렇게하고 잘 작동합니다.

UUIDField는 Postgres UUID 필드에 저장됩니다.

+0

uuid를 기본 키로 사용하고 싶지 않지만 내 모델은 여전히 ​​기본 숫자 자동 증가 ID를 사용합니다. API에 소비자가 레코드 (생성 순서 등)에 대한 고유 한 정보를 제공하지 않고 apu를 통해 레코드를 노출하기 위해 uuid를 사용하고 있습니다. Postgres가 Python Uuid 모듈 – Andrea

+0

대신에 독자적으로 uuids를 생성하기를 원할 것입니다. 그렇습니다. 그러면 코드가 그렇게 할 것입니다 (uuid 부분을 생성하는 Postgres 제외). 귀하의 'MyModel'객체는 id, name 및 uuid를 갖습니다. Uuid는 db에 저장되기 전에 기본 함수에 의해 설정됩니다. Postgres가이 경우에 채울 유일한 값은 id입니다. –