U E D R , A S I H C RSS

django/Model

모델은 웹 어플리케이션에서 사용할 데이터를 명세한 python소스코드이다. 모델은 데이터베이스와 연동되며, 간단한 경우 모델 하나가 데이터베이스 테이블 하나로 매핑된다. 따라서 웹 개발자는 데이터베이스를 직접 손대지 않고 소스코드인 모델을 변경해가면서 작업을 진행할 있다. 모델을 변경할 때마다 django에서 제공하는 manage.py syncdb를 이용하면 변경된 모델이 데이터베이스 테이블에 반영된다.

테이블 생성

모델은 사용자가 지정하지 않는 경우 기본적으로 id라는 이름으로 정형 주키를 가진다.
class Risk(models.Model):
    #id = models.AutoField()
    name= models.CharField(maxlength=10)
    ...

모델에 해당하는 테이블을 생성하는 SQL문은 python manage.py sql <app name>으로 확인할 있다. 위에 해당하는 SQL문은 다음과 같다.
CREATE TABLE "manage_risk" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(10) NOT NULL
);

다 대 일 관계

다 대 일 관계에서는 다 쪽에서 일쪽을 참조하도록 설계해야 한다.
class RiskReport(models.Model):
    risk= models.ForeignKey(Risk)
    ...
혹은 모델이 되는 클래스의 이름을 문자열로 지정할 도 있다. 이는 클래스를 정의하는 순서에 상관없이 한 모델이 다른 모델을 참조할 있도록 한다.
class RiskReport(models.Model):
    risk= models.ForeignKey('Risk')
    ...

다 대 다 관계

다 대 다 관계에서는 어느 한 쪽 모델에 다 대 다 관계임을 표현한다. 하지만 양쪽 모두에 다 대 다 필드를 설치하면 안된다. Django는 다 대 다 관계인 경우 이를 표현하는 테이블을 자동으로 생성한다. 다음은 Employee와 Deparment모델 사이에 다 대 다 관계를 나타내고 있다.
class Employee(models.Model):
    name= models.CharField(maxlength=100)
    email= models.EmailField()

class Department(models.Model):
    name= models.CharField(maxlength=100)
    location= models.CharField(maxlength=200)
    employees= models.ManyToManyField(Employee)
다대다 관계는 좀더 복잡해질 있다. 두 모델 사이에 관계에 해당하는 테이블이 또다른 속성이 필요한 경우이다. 이 때는 중간 역할을 하는 모델을 직접 생성하고 양쪽 모델을 참조하도록 만든다. 다음은 RiskReportControlReport사이 다 대 다 관계에서 보고된 위험에 대해서 대처 방안이 적절했는지 평가하는 is_vaild속성을 가지는 RiskControl모델을 보여주고 있다.
class RiskReport(models.Model):

class ControlReport(models.Model):

class RiskControl(models.Model):
    risk_report= models.ForeignKey(RiskReport)
    control_report= models.ForeignKey(ControlReport)
    is_vaild= models.BooleanField()
하지만 이 경우 risk_report와 control_report의 합성키를 사용하도록 지원하지 않는다.

Admin

Django는 정의한 모델에 Admin클래스를 재정의해서 이를 삽입, 삭제, 갱신할 있는 기본적인 관리자 인터페이스를 자동으로 생성해준다. 사용자 인터페이스는 입력 항목을 원하는대로 배치할 있으며, 원하는 디자인도 적용할 있다. 이것으로 기본적인 입력 시스템은 만들어졌다.
Screenshot-Django-site-admin.png

Screenshot-ManyToOne.png

Screenshot-ManyToMany.png

----
django/Example
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:39
Processing time 0.0143 sec