Django docs를 읽으면 관리자 Foo
와 같이 모델 을 정의 하여 모델에 대한 사용자 정의 작성 방법을 작성하는 것이 좋습니다 create_foo
.
class BookManager(models.Manager):
def create_book(self, title):
book = self.create(title=title)
# do something with the book
return book
class Book(models.Model):
title = models.CharField(max_length=100)
objects = BookManager()
book = Book.objects.create_book("Pride and Prejudice")
내 질문은 왜 이전 클래스가 단순히 기본 클래스의 create
메소드 를 재정의하는 것보다 선호되는지입니다 .
class BookManager(models.Manager):
def create(self, title):
book = self.model(title=title)
# do something with the book
book.save()
return book
class Book(models.Model):
title = models.CharField(max_length=100)
objects = BookManager()
book = Book.objects.create("Pride and Prejudice")
Imo 그것은 재정의만 create
이 실수로 모델 인스턴스를 만들기 위해 실수로 그것을 사용하지 못하게 하는 것처럼 보입니다. create_foo
항상 완전히 우회 할 수 있기 때문입니다 .
class BookManager(models.Manager):
def create_book(self, title):
book = self.create(title=title, should_not_be_set_manually="critical text")
return book
class Book(models.Model):
title = models.CharField(max_length=100)
should_not_be_set_manually = models.CharField(max_length=100)
objects = BookManager()
# Can make an illformed Book!!
book = Book.objects.create(title="Some title", should_not_be_set_manually="bad value")
문서가 제안한 것처럼 그것을 수행하는 데 이점이 있습니까, 아니면 실제로 create
객관적으로 더 낫습니다.