Django | 대칭 이동 관계 추가 객체: 다대일
django 1.10.3
1 사용자 정의 모델 키 아님
1.1 모델 예
@python_2_unicode_compatible
class Author(models.Model):
name = models.CharField(max_length=30)
def __str__(self):
return self.name
@python_2_unicode_compatible
class Posts(models.Model):
headline = models.CharField(max_length=100)
author = models.ForeignKey(Author, related_name="author_posts")
def __str__(self):
return self.headline
1.2 운영 프로세스
In [6]: author2 = Author.objects.create(name='paul')
In [7]: post2 = Posts(headline='hello post2')
In [11]: author2.author_posts.add(post2, bulk=False)
BEGIN
Execution time: 0.000018s [Database: default]
INSERT INTO "apple_posts" ("headline",
"author_id")
VALUES ('hello post2',
2)
Execution time: 0.000314s [Database: default]
In [12]: author2.author_posts.add(post2, bulk=False)
BEGIN
Execution time: 0.000018s [Database: default]
UPDATE "apple_posts"
SET "headline" = 'hello post2',
"author_id" = 2
WHERE "apple_posts"."id" = 3
Execution time: 0.000257s [Database: default]
여기에 주의사항 추가
bulk=False
2 모델 기본 키 사용자화2.1 모델 예
import uuid
class BaseBackBone(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid1().hex, editable=False, max_length=32)
class Meta:
abstract = True
@python_2_unicode_compatible
class AuthorWithId(BaseBackBone):
name = models.CharField(max_length=30)
def __str__(self):
return self.name
@python_2_unicode_compatible
class PostsWithId(BaseBackBone):
headline = models.CharField(max_length=100)
author = models.ForeignKey(AuthorWithId, related_name="author_posts")
def __str__(self):
return self.headline
2.2 운영 프로세스
In [2]: author1 = AuthorWithId.objects.create(name='paul')
In [3]: post1 = PostsWithId(headline='hello post1 with id')
In [5]: author1.author_posts.add(post1, bulk=False)
BEGIN
Execution time: 0.000019s [Database: default]
UPDATE "apple_postswithid"
SET "headline" = 'hello post1 with id',
"author_id" = '7d9d0f91ad6f11e6b0c1f45c89a84eed'
WHERE "apple_postswithid"."id" = '7d9d0f91ad6f11e6b0c1f45c89a84eed'
Execution time: 0.000141s [Database: default]
INSERT INTO "apple_postswithid" ("id",
"headline",
"author_id")
SELECT '7d9d0f91ad6f11e6b0c1f45c89a84eed',
'hello post1 with id',
'7d9d0f91ad6f11e6b0c1f45c89a84eed'
Execution time: 0.000291s [Database: default]
In [6]: author1.author_posts.add(post1, bulk=False)
BEGIN
Execution time: 0.000021s [Database: default]
UPDATE "apple_postswithid"
SET "headline" = 'hello post1 with id',
"author_id" = '7d9d0f91ad6f11e6b0c1f45c89a84eed'
WHERE "apple_postswithid"."id" = '7d9d0f91ad6f11e6b0c1f45c89a84eed'
Execution time: 0.001262s [Database: default]
3 요약
사용자 정의 메인 키를 사용하여 대상을 추가할 때 데이터베이스에서 조회 작업을 한 번 더 할 것입니다. 왜냐하면 Django는 업데이트인지 삽입 작업인지 검증해야 하기 때문입니다.사용자 정의 키 장면을 사용하면 데이터베이스에 대한 조회 조작이 증가합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.