-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathmodel.txt
105 lines (91 loc) · 7.63 KB
/
model.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
0412 MODEL수업 숙제
**일반필드 인수 적기
1. help_text: 위에서 다뤘던 것 처럼, HTML 양식(form)에 대해 텍스트 라벨을 제공합니다 (예시 : 관리자 사이트).
2. null: 만약 True라면 장고는 빈 NULL값을 필드를 위한 데이터베이스에 저장한다.(CharField는 대신 빈 문자열을 저장한다)
기본값은 False이다
3. verbose_name: 필드 라벨 안에서 사용되는 인간이 읽을 수 있는 필드 이름입니다. 지정되지 않았다면, 장고가 기본 verbose_name을 필드 이름으로부터 유추합니다.
4. blank : 만약 True라면 필드는 양식(form)안에서 비워두는 것이 허락된다. 기본값은 False이고
장고의 양식(form) 검증이 값을 입력하도록 강제한다는 뜻이다. 이것은 종종 null=True 와 함께 사용된다.
blank값을 허락할 때 데이터베이스에서도 공백값을 적절하게 표시할 수 있어야 하기 때문이다.
5. choices: 필드를 위한 선택들의 모임이다. 이 인수가 제공된다면, 대응하는 기본 양식(form)위젯은
표준 텍스트 필드가 아닌 이 선택 항목을 가진 선택 상자이다.
6. primary_key: 만약 True라면 현재 필드를 모델의 primary key로 설정한다.
(primary key는 모든 다른 테이블 레코드들을 고유하게 확인하도록 지정된 특별한 데이터베이스 열이다)
primary key로 지정된 필드가 없다면 장고가 자동적으로 이 목적의 필드를 추가한다.
4. choices: 필드를 위한 선택들의 모임. 이 인수가 제공된다면, 대응하는 기본 양식(form) 위젯은 표준 텍스트 필드가 아닌 이 선택 항목을 가진 선택 상자입니다.
5.
6. primary_key: 만약 True라면, 현재 필드를 모델의 primary key로 설정합니다(primary key는 모든 다른 테이블 레코드들을 고유하게 확인하도록 지정된 특별한 데이터베이스 열입니다). primary key로 지정된 필드가 없다면 장고가 자동적으로 이 목적의 필드를 추가합니다
7. default: 필드를 위한 기본값입니다. 이것은 값 또는 호출 가능한 객체일 수 있습니다. 이때 객체는 새로운 레코드가 생성될 때 마다 호출됩니다.
**일반필드 타입 적기
1. CharField 는 작거나 중간 크기CharField 는 작거나 중간 크기의 고정된 길이의 문자열을 정의할 때 사용합니다.
저장되기 위해서는 데이터의 최대 길이( max_length)를 정해주어야 합니다.
2. TextField는 임의의 긴 문자열에 사용됩니다. 필드의 최대 길이( max_length )를 지정해야 할 수도 있지만, 그것은 필드가 양식(form) 안에 표시될 때만 지정하면 됩니다(데이터베이스 레벨에서 강제되지 않습니다).
3. IntegerField는 정수값(모든 숫자)을 저장하는 필드입니다. 그리고 양식(form)에 입력된 값이 정수임을
검증하기도 합니다.
4. DateField와 DateTimeField는 날짜와 날짜/시간 정보를 저장/표현하는데 사용됩니다.
(각각 파이썬 datetime.date 그리고 datetime.datetime 객체로). 이 필드들은 추가적으로 (서로 독점적인)auto_now=True
(모델이 저장될 때 마다 필드를 현재 날짜로 설정하기 위해), auto_now_add(모델이 처음 생성되었을 때만
날짜를 설정하기 위해), 그리고 default(사용자에 의해 변경될 수 있는 기본 날짜를 설정하기 위해) 매개 변수를
선언할 수 있습니다.
5. EmailField 는 이메일 주소를 저장하고 검증하기 위해 사용합니다.
6. FileField와 ImageField는 각각 파일과 이미지를 업로드하기 위해 사용됩니다(ImageField는 단지 업로드된 파일이
이미지임을 확인하는 추가 검증을 더할 뿐입니다). 이것들은 업로드 된 파일들이 어디에 어떻게 저장되는지 정의
하는 매개 변수를 가집니다.
7. AutoField는 자동적으로 증가하는 IntegerField의 특별한 타입입니다. 이 타입의 primary key는 명시적으로
지정하지 않는 이상 모델에 자동적으로 추가됩니다.
8. ForeignKey는 다른 데이터베이스 모델과 일-대-다 관계를 지정하기 위해 사용됩니다
(예시: 차는 하나의 제조사를 갖고 있지만 제조사는 많은 차들을 만들 수 있습니다).
일대다에서 "일"쪽이 key를 포함하는 모델입니다.
9. ManyToManyField는 다-대-다 관계를 지정하기 위해 사용됩니다
(예시: 책은 여러 장르를 가질 수 있고, 각각의 장르에도 많은 책들이 있습니다). 우리 예제인 도서관 어플리케이션
에서는 이 필드를 ForeignKeys와 매우 유사하게 사용할 겁니다. 하지만 그룹 사이의 관계를 보여주기 위해서는
더욱 복잡한 방식으로 사용될 수 있습니다. 이것은 레코드가 삭제됐을 때 어떤 일이 일어나는지 정의하기 위해
on_delete 매개 변수를 가집니다(예시: models.SET_NULL의 값은 단순히 NULL값으로 설정될 겁니다).
** 기본키란? (1)
기본키란 관계에 저장된 레코드를 고유하게 식별하는 것들 가운데,
사용자가 일반적으로 이용되어야한다고 정해놓은 것을 가리킨다.
모델 필드에 primary_key=True를 지정하지않으면
Django는 자동으로 IntegerField를 추가하여 기본키를 잡는다.
사용자 지정 기본 키를 지정하려면 필드 중 하나를 지정하면된다.
각 모델마다 명시적으로 선언되거나 자동으로 추가된
primary_key=True 필드는 정확히 한개 있어야한다.
**메타데이터란? (1)
메타 데이터는 "데이터에 관한 데이터"를 의미합니다.
메타 데이터는 데이터의 하나 이상의 측면에 관한 정보를
제공하는 데이터로 정의됩니다.
특정 데이터를 쉽게 추적하고
작업하게하는 데이터에 대한 기본 정보를
요약하는 데 사용됩니다.
예를 들어 디지털 이미지에는 사진의 크기,
색상 깊이, 이미지 해상도, 이미지 생성 시의
셔터 속도 및 기타 데이터를 설명하는
메타 데이터가 포함될 수 있습니다.
**외래키란? (1)
일대다 관계를 정의하려면 django.db.models.ForeignKey 클래스를 이용하여 필드를 선언한다.
ForeignKey 필드 선언시에 관계를 맺을 모델 클래스를 인자로 넘겨주어야 한다.
**장고에서 외래키 설정 방법(1)
from django.db import models
class C1(models.Model) #'일대다에서 다'인 클래스명 : C1
class C2(models.Model) #'일대다에서 일'인 클래스명 : C2
c1= models.ForeignKey(C1) #관계를 맺을 모델 클래스를 인자로 넘겨준다.
**외래키 예시 (2, 블로그 링크 ok)
1>
Car 모델과 Manufacturer 모델이 일대다 관계라고 가정해 봤을 때
(Manufacturer는 여러개의 Car와 관계를 가지지만, Car는 단 하나의 Manufacturer와 관계를 가진다)
from django.db import models
class Manufacturer(models.Model):
#...
pass
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer)
#...
재귀적인 관계도 가능하다. 단, 첫번째 인자를 클래스가 아닌 클래스 명을 문자열로 전달해야 한다.
필드가 선언되는 시점에는 아직 클래스가 생성되지 않았기 때문이다.
즉, 클래스 대신 클래스 명을 인자로 사용함으로써 클래스 선언 순서에 관계없이 참조 가능하다.
class Employee(models.Model):
boss = models.ForeignKey('Employee')
#...
2>다중 데이터베이스에서의 ForeignKey
https://hangpark.com/django-multi-db-relation/
3>Django 외래키
https://riptutorial.com/ko/django/example/30649/%EC%99%B8%EB%9E%98-%ED%82%A4