관계 필드
ForeignKey, ManyToManyField 및 OneToOneField는 각각 모델에서 다대일, 다대다 및 일대일 관계를 정의합니다.
예를 들어 출판사에서 책을 출판하고, 출판사에서는 여러 권의 책을 출판할 수 있습니다. 한 권의 책은 여러 작가가 집필하고, 한 작가가 여러 권의 책을 쓸 수 있습니다.
클래스 작성자(models.Model):
name=models.CharField(max_length=20)
클래스 게시자(models.Model):
name=models.CharField(max_length=20) )
class Book(models.Model):
name=models.CharField(max_length=20)
pub=models.ForeignKey(출판사)
Authors=models.ManyToManyField(저자)
1. 정의되지 않은 모델과 연결
정의되지 않은 모델과 연결하려면 모델 개체 자체가 아닌 모델 이름을 사용하세요.
예제에서 Book 뒤에 Publisher와 Author가 정의된 경우
class Book(models.Model):
name=models 형식으로 작성해야 합니다. CharField(max_length=20 )
pub=models.ForeignKey('Publisher')
Authors=models.ManyToManyField('Author')
2.모델이 자신을 연결합니다
모델은 다대일 관계 소유
class People(models.Model):
name=models.CharField(max_length=20)
Leader=models.ForeignKey와 연관될 수 있습니다. ('self',blank=True, null=True)
모델은 자신과 다대다 관계를 가질 수도 있습니다
class Person(models.Model):
friends = models.ManyToManyField("self")
기본적으로 이 연관은 대칭입니다. Person1이 Person2의 친구이면 Person2도 Person1의 친구입니다
p1=사람()
p1.save()
p2=사람()
p2.save()
p3=사람()
p3.save()
p1 .friends.add(p2,p3)
위의 경우 p3의 친구를 찾고 싶다면 p3.person_set.all()은 필요 없고 그냥 p3.friends만 사용하면 된다. .all()
이 대칭 관계를 취소하려면 대칭을 False로 설정하세요
class Person2(models.Model):
friends=(models.ManyToManyField("self" ,symmetrical=False)
이 방법으로 p3의 친구를 쿼리하려면 p3.person_set.all()이 필요합니다.
3. 이름 역명 관련_이름
역명, 관련 필드에서 관련 필드를 가리키는 데 사용됩니다.
추상 모델을 정의할 때 주의하세요. , 역방향 이름을 명시적으로 지정해야 하며, 이를 수행한 후에만 일부 특수 구문이 제대로 작동합니다. 클래스 도서(models.Model): name=models.CharField(max_length=20)
pub=models.ForeignKey(Publisher,관련_name='pub')
저자=모델 .ManyToManyField(Author, 관련_name='author')
referents = models.ManyToManyField(User, 관련_name='ref+')
name = models.CharField(max_length=128)
self.name 반환
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
self.name을 반환
클래스 그룹(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
self.name 반환
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
Invitation_reason = models.CharField(max_length=64)
이렇게 하면 특정 사람이 그룹에 참여할 때 녹화할 수 있습니다.
Person과 Group 간의 관계를 설정하려면 추가, 생성, 제거 기능을 사용할 수 없으며 Membership을 사용해야 합니다.
>>> ringo = Person.objects.create(name="Ringo Starr")
>>> paul = Person.objects.create(name="Paul McCartney" )
>>> beatles = Group.objects.create(name="The Beatles")
>>> m1 = 멤버십(person=ringo, group=beatles,
. .. date_joined=date(1962, 8, 16),
... Invitation_reason= "새로운 드러머가 필요합니다.")
>>> m1.save()
clear()는 계속 사용할 수 있습니다
>>> beatles.members.clear()
다대다 관계가 자신과 연관되어 있는 경우, 중간 테이블의 ForeignKey 동일한 모델을 가리킬 수 있지만 대칭이 아닌 ManyToManyField의 양쪽으로 간주되어야 하며 대칭=False로 설정되어야 합니다.
5. 기타 매개변수(인수)
5.1 ForeignKey는 관계 작동 방식을 정의하는 다음과 같은 선택적 매개변수를 허용합니다.
ForeignKey.limit_choices_to
Django 관리 백그라운드에서 관련 개체를 필터링하는 데 사용되는 필터 조건과 해당 값이 포함된 사전입니다. 예를 들어 Python의 날짜/시간을 사용하면 모듈, 필터 조건을 충족하지 않는 관련 객체 필터링:
limit_choices_to = {'pub_date__lte': datetime.date.today}
현재 날짜 이전의 pub_date와 연관된 객체만 허용됩니다. 선택됩니다.
Q를 사용할 수도 있습니다. 사전 대신 개체를 사용하여 더 복잡한 필터링이 가능합니다. Limit_choices_to가 Q 객체인 경우 외래 키 필드가 ModelAdmin의 raw_id_fields에 배치되면 사용할 수 없습니다.
ForeignKey.to_field
현재 관계가 연결된 관련 개체의 필드를 지정합니다. 기본적으로 to_field는 관련 개체의 기본 키를 가리킵니다.
ForeignKey.on_delete
모델 객체의 ForeignKey와 연결된 객체가 삭제되면 기본적으로 이 객체도 계단식으로 삭제됩니다.
user = models.ForeignKey(User, 공백=True, null=True, on_delete=models.CASCADE)
CASCADE: 기본값, 모델 객체는 ForeignKey 객체 삭제됨
SET_NULL: 모델 객체의 ForeignKey 필드를 null로 설정합니다. 물론 null을 True로 설정해야 합니다.
SET_DEFAULT: 모델 객체의 ForeignKey 필드를 기본값으로 설정합니다.
보호: ForeignKey 관련 개체
를 삭제하면 ProtectedError가 발생하여 ForeignKey 관련 개체가 삭제되지 않습니다.
SET(): 모델 객체의 ForeignKey 필드를 SET()에 전달된 값으로 설정합니다.
def get_sentinel_user():
return User.objects.get_or_create(username='deleted')[0]
class MyModel(models.Model):
user = models .ForeignKey(User, on_delete=models.SET(get_sentinel_user))
DO_NOTHING: 아무것도 하지 않습니다.
5.2 ManyToManyField는 관계 작동 방식을 정의하는 다음과 같은 선택적 매개변수를 허용합니다.
ManyToManyField.limit_choices_to
는 ForeignKey.limit_choices_to와 사용법이 동일합니다.
limit_choices_to는 through 매개변수를 통해 지정된 중간 테이블이 있는 ManyToManyFields에 대해 작동하지 않습니다.
ManyToManyField.symmetrical
재귀적 다대다 관계를 정의할 때만 작동합니다.
ManyToManyField.through
중간 테이블 수동 지정
ManyToManyField.db_table
다대를 저장하는 데이터베이스의 테이블 이름 지정 -많은 관계 데이터. 이 옵션이 제공되지 않으면 Django는 두 관계형 테이블의 이름을 기반으로 중간 테이블의 이름으로 새 테이블 이름을 생성합니다.
6.OneToOneField
class OneToOneField(othermodel[, parent_link=False, **options])
는 일대일 관계를 정의하는 데 사용됩니다. 광범위하게 말하면 고유=True라고 선언하는 ForeignKey와 동일합니다. 매우 유사하지만 차이점은 역방향 연관을 사용할 때 개체 목록이 아니라 단일 개체를 얻는다는 것입니다.
이 필드는 모델이 다른 모델에서 확장될 때 매우 유용합니다. 예를 들어 다중 테이블 상속(Multi-tableinheritance)이 하위에 전달됩니다. 이는 상위 모델을 가리키는 모델에 일대일 연관을 추가함으로써 달성됩니다.
이 필드에는 관련 모델 클래스라는 매개변수가 제공되어야 합니다. 재귀적 및 게으른 연결을 포함하여 ForeignKey와 동일하게 작동합니다. 더 같은.
또한 OneToOneField는 ForeignKey가 허용하는 매개변수를 허용하며 그 중 OnetoOneField만 허용됩니다. 독점: OneToOneField.parent_link
True이고 상위 모델에서 상속된 하위 모델에 대해 작동하는 경우(이는 상속이 지연될 수 없으며 상위 모델은 실제로 존재해야 함) 필드는 상위 클래스를 확장하고 다른 OneToOneField와 같은 상위 클래스 속성을 상속하는 데 사용되는 대신 상위 클래스 인스턴스
를 가리키는 참조(또는 링크)가 됩니다.
django.db에서 import models, transaction, IntegrityError
class Place(models.Model):
이름 = models.CharField(max_length=50)
주소 = 모델. CharField(max_length=80)
def __unicode__(self):
return u"%s the place" % self.name
class Restaurant(models.Model):
place = models.OneToOneField(Place, Primary_key=True)
presents_hot_dogs = models.BooleanField()
presents_pizza = models.BooleanField()
def __unicode__(self):
return u" %s 레스토랑" % self.place.name
class Waiter(models.Model):
레스토랑 = models.ForeignKey(Restaurant)
name = models.CharField(max_length=50)
def __unicode__(self):
return u"%s the waiter at %s" % (self.name, self.restaurant)
역방향 사용 연관된 경우, 얻는 것은 객체 목록이 아니라 단일 객체입니다:
>>> p1 = Place(name='Demon Dogs', address='944 W. Fullerton')
>>> p1.save()
>>> r = Restaurant(place=p1, presents_hot_dogs=True, presents_pizza=False)
>>> ()
>>> p1.restaurant
>>> Place.objects.get(restaurant__place__name__startswith="Demon")
>>> Waiter.objects.filter(restaurant__place__name__startswith="Demon")
위는 Django 문서입니다 - 모델 콘텐츠 부탁드립니다. 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트(www.php.cn)를 주목하세요!

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...

정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까? HTML 또는 기타 마크 업 언어를 다룰 때는 정규 표현식이 종종 필요합니다.

Investing.com의 크롤링 전략 이해 많은 사람들이 종종 Investing.com (https://cn.investing.com/news/latest-news)에서 뉴스 데이터를 크롤링하려고합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

뜨거운 주제



