Django Models 10 모델 메소드

Meta options

모델 자체에 메타 데이터를 주고 싶은 경우

class Meta:
    ....

를 사용

메타 데이터는 데이터를 표현 하기 위한 데이터 이다. 필드에 대한 설명은 모델 클래스에 정의 되어 있지만 필드가 아닌 모든 것은 메타 클래스에 정의 한다. 테이블에 대한 정보도 메타 클래스에 정의 한다.

모델 속성

objects 모델의 가장 중요한 속성은 Manager이다. 이것은 DB로 부터 데이터를 가져오고 검색하기 위해서 제공되는 인터페이스다. 사용자 정의 manager가 정의되지 않은 경우 기본 이름은 objects manager는 모델 인스턴스가 아닌 모델 클래스를 통해서만 액세스 할 수 있다.

ManyToManyField ForeignKey등으로 만들어진 객체도 manager다.

모델 메소드

모델에 사용자 지정 메서드를 정의 하여 사용자 지정 행 수준(인스턴스 수준) 기능을 추가 한다. Manager메소드는 테이블 차원(클래스 수준)의 일을 수행하기 위한 것이지만 모델 메소드는 특정 인스턴스에서 작동 해야한다.

한마디로 모델 클래스에 인스턴스 메소드를 만들어 해당 클래스로 만들어진 인스턴스 에게만 기능을 수행하는 것. 반대로 Manager메소드는 모델 클래스의 테이블에 전반적인 기능을 수행하기 위해 사용.

모델 에는 각 모델에 자동으로 부여 되는 메소드들이 있다. 미리 정의된 모델 메소드들을 재정의 하는 방법을 참고하면 대부분 재정의 할 수 있다.

__str__() 모든 객체의 문자열 표현을 반환. 기본값은 pk get_absolute_url() 장고가 객체의 URL을 알아 내는 방법으로 오브젝트의 URL을 어떻게 판단하는 가

이미 정의돈 메소드들을 재정의 하고 싶은 경우

save()delete()에 관련된 메소드들을 재정의 하고 싶은 경우가 많다.

class Blog(models.Model):
    ...
    def save(self, *args, **kwargs):
        do_something()
        super().save(*args, **kwargs)
        do_something_else()        

쿼리셋을 사용하여 대량으로 객체를 삭제 할 때 또는 뎨간식 삭제의 결과르 객체의 delete()메소드가 반드시 호출되지는 않는다. 사용자 정의 삭제가 실행되도록 하려면 pre_delete, post_delete 시그널을 사용할 수 있다. 하지만 불행하게도 save(), pre_save(), post_save()가 호출되지 않기 때문에 객체를 대량으로 만들거나 업데이트 할 떄 해결 방법이 없다. ###

Comments