django Models에 대한 개인적 이해와relatedname 사용

10422 단어 django
신인으로서 (대학을 졸업하기도 전에 실습하러 나왔는데 정말 아무것도 모르고 아무것도 다시 배워야 한다고 할 수 있지만 이렇게 하면 정말 자신의 의지력과 능력을 단련할 수 있다).현재 공무에 종사하다
사는 앞쪽과 뒤쪽이 함께 앉기 때문에 배울 것이 정말 생각지도 못하게 많다.공부하는 과정에서 많은 문제점이 생겼습니다. 오늘django의 모델에 대한 지식을 여러분과 공유하고
옳지 않거나 부적절한 점이 있으면 여러분이 바로잡아 주시고, 모두가 함께 공부하고, 함께 진보해 주시기를 바랍니다. 여기서 사과드립니다.
프로그램을 하는 사람들은 모두 알고 있다고 믿습니다. 관계 데이터베이스의 강함은 데이터베이스로 데이터를 저장할 수 있기 때문만은 아닙니다. 더 중요한 것은 데이터베이스에 있는 테이블과 테이블 사이의 관계를 저장할 수 있기 때문입니다. Django는
세 가지 가장 통용되는 데이터베이스 관계 모델을 제공하였다
1 mang-to-many
2 many-to-one (다대일 관계)
3 one-to-one (일대일 관계)
 
1, 다대일 관계:
ForeignKey를 사용하여 일대일 관계를 정의합니다.사용법은 다른 Field와 마찬가지로 모델의 클래스 속성 정의에 넣으면 됩니다.ForeignKey에 연결된 클래스가 필요합니다.
위치 매개변수.여기서 저는 django book 중의 비교적 고전적인 실례를 이용하여 여러분과 함께 공유합니다. 우선, 세 가지 모델을 정의했습니다. 그것이 바로 Publisher(출판사), Author(작가)와 Book(책)입니다.
 1 class Publisher(models.Model):

 2     name = models.CharField(max_length=30)

 3     address = models.CharField(max_length=50)

 4     city = models.CharField(max_length=60)

 5     state_province = models.CharField(max_length=30)

 6     country = models.CharField(max_length=50)

 7     website = models.URLField()

 8     def __unicode__(self):

 9          return self.name

10 

11 

12 class Meta:

13         ordering = ['name']

14 

15 

16 class Author(models.Model):

17     first_name = models.CharField(max_length=30)

18     last_name = models.CharField(max_length=40)

19     email = models.EmailField(blank=True)

20     def __unicode__(self):

21          return  u'%s %s' % (self.first_name, self.last_name)

22 

23 

24 class Book(models.Model):

25     title = models.CharField(max_length=100)

26     authors = models.ManyToManyField(Author)

27     publisher = models.ForeignKey(Publisher, related_name = "publisher_set")

28     publication_date = models.DateField(blank=True, verbose_name='e-mail')

29     num_pages = models.IntegerField(blank=True, null=True)

30     # objects = BookManager()

31     objects = models.Manager()           # The default manager.

32     dahl_objects = DahlBookManager()     # The Dahl-specific manager

33 

34     # .

35     def __unicode__(self):

36          return self.title

하나의 대상과 자신의 다대일 관계를 구축하려면 다음과 같이 쓸 수 있다. 모델스.ForeignKey('self') :  1 class Employee(models.Model): 2 manager = models.ForeignKey ('self ') 관계를 만들 때 필요한 모델이 정의되지 않았을 때, 모델 대상 자체를 사용하지 않고 그 모델의 이름을 사용할 수 있습니다. 
1 class Car(models.Model):

2 manufacturer = models.ForeignKey('Manufacturer')

3 ...

4 class Manufacturer(models.Model):

하지만 같은 모델에만 있을 수 있다는 것을 명심해라.py 파일의 모델은 문자열 인용을 사용합니다. 다른 프로그램의 모델이나 다른 곳에서 가져온 모델은 이름으로 인용할 수 없습니다.Django가 데이터베이스에서 사용하는 열 이름이 해당 필드의 이름인 경우 추가id에서 얻은 문자열입니다.그리고 앞의 그 예에서 카모델에 대응하는 데이터베이스 테이블에는 manufacturer 라는 이름이 있을 것이다id의 열, (db column을 지정하여 이 이름을 현시적으로 바꿀 수 있습니다. 앞의db column 1절을 참고하십시오.) 그러나 맞춤형 SQL 문장을 쓸 필요가 없다면 데이터베이스 열 이름을 처리하지 말고 모델 대상의 필드 이름만 처리하십시오.여기에 몇 가지 개념을 명확하게 설명해야 한다. 처음에 나는 이 위에 실었다. 공감하는 친구가 볼 수 있기를 바란다. ForeignKey 옵션 1.edit_inline: False로 설정하지 않으면 대응하는 대상을 페이지에서 편집할 수 있습니다. 즉, 이 대상은 독립된 관리 인터페이스를 가지고 있습니다.models로 설정하면TABULAR 또는 모델스.STACKED의 경우 이 내연 편집 대상은 각각 표나 필드의 집합으로 표시됩니다.2.limit_choices_to: 대상의 값의 범위를 한정할 수 있는 매개 변수와 값의 사전.Python의datetime 모듈을 결합한 함수는 날짜에 따라 대상을 한정할 수 있습니다.예를 들어, 다음 코드: limitchoices_to = {'pub date lte':datetime.now} 선택 가능한 대상을pub 로 한정날짜가 현재 시간의 대상보다 빠릅니다.사전 외에도 더 복잡한 검색을 수행할 수 있는 Q 대상입니다. 이 옵션과editinline은 호환되지 않습니다.
3.max_num_in_admin
내부 편집 대상입니다. 이것은 관리 인터페이스에 표시할 관련 대상의 최대 개수입니다.그래서 피자는 최대 10가지 조미료만 있고, maxnum_in_admin=10은 사용자가 최대 10가지 재료를 입력할 수 있도록 보장합니다.이 항목은 10가지 이상의 원료를 만들지 않을 것을 보장하지 않는다. 그는 파이톤의 API 층과 데이터베이스 층에서 어떤 제한을 하지 않고 관리 인터페이스를 제어할 뿐이다.4.min_num_in_관리자가 관리 인터페이스에 표시할 관련 대상의 최소 개수입니다.일반적으로, 만들 때 내연 대상의 개수는numin_admin개, 편집할 때 현재 토대에서numextra_on_change 개 빈 대상이지만 표시된 대상 개수는min 보다 적지 않습니다num_in_admin 개.5.num_extra_on_change에서 대상을 수정할 때 추가로 표시할 대상 수입니다.6.num_in_관리자가 대상을 추가할 때 표시할 내연 대상의 기본 개수입니다.7.raw_id_admin은 밑에 있는 목록이 아니라 입력할 정수를 위한 텍스트 상자를 표시합니다.연결된 대상이 여러 줄이 있을 때, 이것은 목록 선택 상자를 표시하는 것보다 더 실용적이다.edit 사용inline에서는 이 항목이 유효하지 않습니다.8.related_name 관련 대상의 역인용 설명자입니다.9.to_field 연관 객체의 연관 필드로, Django는 기본적으로 연관 객체의 주 키를 사용합니다.
ForeignKey를 배우고 깊이 이해하려면 상기 ForeignKey의 이 옵션들에 대해 어느 정도 알고 있어야 한다.이렇게 하면 ForeignKey에 대한 인상을 깊게 할 수 있다.모든 것이 준비되어 있습니다. 지금 만약에 Book 이 테이블을 통해 Publisher와 Author에 접근하고 싶다면, Book 이 테이블에는 외부 키가 이 두 테이블과 연결되어 있기 때문에, 문장을 통해 Book과 Publisher 테이블에 직접 접근할 수 있습니다. 
1 def get_info(request, id):

2     books = Book.objects.filter(publisher__id = id).all()

3     return render_to_response("showdb_info.html",{

4         "books": books

5     },

6      context_instance=RequestContext(request))

이 단계는 모두가 알고 있다고 믿는다. 설령 모른다 하더라도 필자의 이 블로그를 보고 나면 틀림없이 일목요연할 것이다.그런데 반대로 하면 어떻게 조회해야 하나요?(Publisher나 Author 테이블을 통해 Book 테이블의 내용을 조회합니다) 여기에는 Books의 임의의 필드에 접근할 수 있는 상당히 중요한 ForeignKey 옵션이 필요합니다. 
def get_book_info(request, id):

    publisher = Publisher.objects.filter(publisher_set__id = id)

    return render_to_response("showdb_info.html",{

        "publisher": publisher,

    },

     context_instance=RequestContext(request))

이상python 함수 중의 것은 모두 위조 코드로 관심 있는 독자는 스스로 자신의 코드를 설계할 수 있다.이 글은 지속적으로 업데이트될 것입니다. 뜻이 있는 사람은 지속적으로 관심을 가질 수 있습니다. 여러분의 지적이 부족한 것을 환영합니다! 
 

좋은 웹페이지 즐겨찾기