Django에서 방금 만든 레코드의 ID를 얻는 방법은 무엇입니까?


82

내 프로젝트 중 하나에 Django 1.3을 사용하고 있으며 방금 데이터베이스에 저장된 레코드의 ID를 가져와야합니다.

데이터베이스에 레코드를 저장하려면 아래 코드와 같은 것이 있습니다.

n = MyData.objects.create(record_title=title, record_content=content)
n.save()

방금 저장 한 자동 증분 레코드의 ID입니다. 해당 ID를 가져 와서 내 코드의 다른 곳에서 사용할 수있는 방법이 있습니까?


13
새 인스턴스 n.save()MyData.objects.create자동으로 저장 하므로 여기에서 줄 이 필요하지 않습니다 .
Daniel Roseman

내 대답 stackoverflow.com/a/25807622/3762142는 HTML 페이지에 당신에게 ID를 얻을 것이다 ..
라자 시몬에게

답변:


118

n.id저장 후 사용하십시오 .

" 기본 키 자동 증가 "를 참조하십시오 .


2
보기에서 양식을 사용하여 데이터를 저장할 때 froms 개체에 의해 저장된 ID에 액세스하는 방법은 무엇입니까?
Neeraj Kumar

2
n.pk기본 키를 직접 추가하지 않았거나 기본 키를 추가하고 이름을 id로 지정한 경우에만 id가 되어야합니다 .
Joel G Mathew

@JamesO이 ID를 모델 인스턴스로 가져 오거나 확인하는 방법.
Jeet Patel

54

그것은 될 것 n.pk입니다.

" Model.pk " 를 인용하려면 :

기본 키 필드를 직접 정의하든 Django가 제공하도록하든 관계없이 각 모델에는 pk라는 속성이 있습니다. 모델에서 일반 속성처럼 작동하지만 실제로는 모델의 기본 키 필드 인 속성에 대한 별칭입니다. 다른 속성과 마찬가지로이 값을 읽고 설정할 수 있으며 모델의 올바른 필드를 업데이트합니다.


4
좋은 발견. 이는 호출 .pk이 기본 ID 또는 사용자 지정 ID를 참조하므로 "모범 사례"로 간주 될 수 있음을 나타냅니다 .
j_syk

위의 링크는 django의 in-dev 버전으로 이동합니다. : V 1.7 - V1.10 같은 일이, 비록 말한다 docs.djangoproject.com/en/1.10/ref/models/instances/... 에 대한 V1.7 이전하지 않도록주의
키스


1

save ()를 제거하고 pk를 직접 가져옵니다.

n = MyData.objects.create(record_title=title, record_content=content)
n.pk

1

ID 액세스와 비슷한 문제가 있습니다. Django 3.0.5에서 이것이 내가 ID에 액세스하는 방법입니다. 예제와 변수 이름을 사용하여 아래를 참조하십시오.

instance = n.save()
# return the id
instance[0].id 

위의 '인스턴스'변수는 목록입니다. 위에서 설명한 메서드에서 id에 액세스하면 Django 3에서 AttributeError ( "object has no attribute 'id'")가 반환됩니다.

이 대답은 modelformset_factory. 이것은 Django 문서에 설명 된대로 Django 모델에서 Form 클래스를 만들 때 사실입니다.


0

이 질문을 읽는 사람이 나머지 답변을 읽는 경우 개체를 만든 후에도 ID에 액세스하는 데 여전히 문제가 있습니다. id모델에서 Integer로 정의하지 마십시오 . Django에서는 무료이므로 ID를 쓰거나 사용할 수 없습니다.Autofield

#No
class TestModel(models.Model):
    id = models.IntegerField(primary_key=True)
    something...


#Ok
class TestModel(models.Model):
    id = models.AutoField(primary_key=True)
    something...

#Ok
class TestModel(models.Model):
    something...

idInteger로 정의 TestModel.objects.create(하거나 with save()는 None을 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.